Java 代码设计:自复位布尔。反对的理由?
我在考虑一个get方法,它会自动重置。我的构造实际上也很有效。但我不确定我是否应该避免这种情况。 其思想是,在第一次“true”返回后,该值会自动重置。在这种情况下,get值是一个布尔值,它告诉我是否收到了答案。一旦我得到一个true,该成员应该将自己重置为false。否则,我将不得不手动执行此操作。 下面是我对这个想法的工作方法。如果该值为true,我将启动一个新的小线程,等待200ms并将成员重置回false。同时,旧值已经返回。 我的问题是,我可以/应该这样使用它,还是有一些主要的反对理由?因为不知怎的,我有种感觉,这种方式不值得推荐 谢谢你的意见Java 代码设计:自复位布尔。反对的理由?,java,Java,我在考虑一个get方法,它会自动重置。我的构造实际上也很有效。但我不确定我是否应该避免这种情况。 其思想是,在第一次“true”返回后,该值会自动重置。在这种情况下,get值是一个布尔值,它告诉我是否收到了答案。一旦我得到一个true,该成员应该将自己重置为false。否则,我将不得不手动执行此操作。 下面是我对这个想法的工作方法。如果该值为true,我将启动一个新的小线程,等待200ms并将成员重置回false。同时,旧值已经返回。 我的问题是,我可以/应该这样使用它,还是有一些主要的反对理由
public boolean isAck() {
if (acknowledged){
Thread th = new Thread() {
public synchronized void run() {
try {
Thread.sleep(200);
acknowledged = false;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
th.start();}
return acknowledged;
}
根据你的评论,我会这样做-
public boolean isAck() {
if (acknowledged) {
setAck(false);
return true;
}
return false;
}
如果你不喜欢这种方法;你可能更喜欢
public boolean isAck() {
try {
return acknowledged;
} finally {
setAck(false);
}
}
根据你的评论,我会这样做-
public boolean isAck() {
if (acknowledged) {
setAck(false);
return true;
}
return false;
}
如果你不喜欢这种方法;你可能更喜欢
public boolean isAck() {
try {
return acknowledged;
} finally {
setAck(false);
}
}
那么这个呢:
public boolean isAck() {
synchronized(this) {
boolean result = false;
if (acknowledged){
result = true;
acknowledged = false;
}
}
return result;
}
那么这个呢:
public boolean isAck() {
synchronized(this) {
boolean result = false;
if (acknowledged){
result = true;
acknowledged = false;
}
}
return result;
}
为什么不立即重置它呢?您的访问器可能不应该也是变异器。你希望你发布的代码做什么?我不确定你通过重置值来实现什么。但是,您正在生成一个线程来重置它,如果您的应用程序尝试再次访问isAck.attributes in codereview.stackexchange.com中的isAck.attributes,您将遇到某种并发问题如果您要设置
acknowledged=true
,然后在循环中调用isAck()
,您能预测哪个迭代会返回false吗?为什么不立即重置它?您的访问器可能也不应该是变异器。你希望你发布的代码做什么?我不确定你通过重置值来实现什么。但是,您正在生成一个线程来重置它,如果您的应用程序尝试再次访问isAck.attributes in codereview.stackexchange.com中的isAck.attributes,您将遇到某种并发问题如果您要设置acknowledged=true
,然后在循环中调用isAck()
,您能预测哪个迭代将返回false吗?