我在Java中需要一个可变的布尔字段(稍后我将通过get*方法返回此字段,并且应该可以修改此字段).
布尔值不起作用,因为布尔类中没有set*方法(我会说布尔值是不可变的,你只能改变引用,但你不能改变对象本身).
我想我可以使用大小为1的布尔数组.但是可能有更优雅的解决方案?
为什么Java没有这么简单的东西?
Tho*_*ung 59
不可变类更易于使用.它们永远不会改变,并发代码也不会出现问题.(基本上,打破它们的可能性较小.)
如果要返回对布尔值的引用,可以使用,java.util.concurrent.atomic.AtomicBoolean如果您正在使用多个线程或普通旧线程org.apache.commons.lang.mutable.MutableBoolean.
Ada*_*kin 27
也许自己写一个包装类
class BooleanHolder {
public boolean value;
}
Run Code Online (Sandbox Code Playgroud)
或者创建一个通用的持有者类(这意味着你将不得不使用类Boolean而不是原始的boolean):
class Holder<T> {
public T value;
}
Run Code Online (Sandbox Code Playgroud)
然后返回包装类而不是值本身,这允许修改包装器内的值.
小智 20
如果您使用的是Java 5或更高版本,请使用AtomicBoolean
小智 6
您可以使用布尔数组
final boolean[] values = { false };
values[0] = true;
Run Code Online (Sandbox Code Playgroud)
为什么不使用布尔原语?
例如
private boolean myFlag = false;
public void setMyFlag(boolean flag) {
myFlag = flag;
}
Run Code Online (Sandbox Code Playgroud)
请注意,由于autoboxing的魔力,如果需要,您的 getter 方法可以返回一个布尔值。这允许在使用原语和它们的对象等价物(例如布尔值与布尔值,或整数与整数)之间轻松互换。
因此,要解决您编辑后的回复。你可用的方法,
public Object getAttribute(String attributeName)
Run Code Online (Sandbox Code Playgroud)
可以通过返回一个自动装箱的布尔值来实现。
只使用布尔原语怎么样?
private boolean value;
public void setValue(boolean value) {
this.value = value;
}
public boolean getValue() {
return value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31997 次 |
| 最近记录: |