gpt4 book ai didi

java - Java 中是否有指向成员的等效项?

转载 作者:行者123 更新时间:2023-11-29 09:20:51 26 4
gpt4 key购买 nike

我有一个类,它包含 GUI 的一些颜色,程序可以根据自己的喜好更改这些颜色。对于 GUI 的特定元素,我希望能够指定属于该类的颜色。在 C++ 中,我可以使用类似的东西

int Pallete::*color = &Pallete::highlight;
Pallete pallete; // made in or passed to the constructor
// ...
void draw() {
drawing.color(pallete.*color);
// ...
}

Java 中是否有等效项?我考虑过在 Class 类中使用 getField(String) ,或者使用字符串键将颜色保留在 Map 中,但是这些似乎都不是很好的解决方案,因为它们依赖于字符串,并且编译器不能强制他们实际上是 Pallete 的成员。我也可以将所有颜色名称放在一个枚举中,并有一些返回关联颜色的 getter 函数,但这对我来说似乎更有效。

最佳答案

您可以只使用 Integer 类。由于它是一个类,因此它遵循引用语义。

这会给你一个类似的类

class Palette
{
public static Integer highlight; // this gets initialize to whatever value

public Integer color = highlight;

}

编辑

好的,所以 Integer 类描述了一个不可变类型,因此您不能更改 Integer 持有的值。不过,解决方案非常简单。您可以只定义自己的可变类,如下所示:

class MyInteger {

private int value;

public MyInteger(int value) {
this.value = value;
}

public int getValue() {
return i;
}

public void setValue(int value) {
this.value = value;
}
}

当然,这个例子只提供了最基本的功能。如果您愿意,可以随时添加更多。您可能还会发现使用内部 Integer 而不是 int 很有用,或者也可能扩展 Number 类(作为 Integer 类)。

如果声明highlightcolorMyInteger类型,并将highlight赋值给 color,然后更改为 highlight 反射(reflect)在 color 中:

Palette.highlight.setValue(0);
palette.color = Palette.highlight;
Palette.highlight.setValue(1);
System.out.println(palette.color); // This line will now print "1" instead of "2"

此方法的一个潜在缺点是您不能像这样编写作业

Palette.highlight = 0;

相反,您必须使用 setValue() 来更改 MyInteger 实例的值。但是,我不认为这是一个很大的损失,因为它实现了您所要求的功能。

关于java - Java 中是否有指向成员的等效项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com