当if(pause == null)
为pause
时,我使用null
做某事。但我收到了错误
the operator == is undefined for the argument type(s) long,null
这是代码,
public class Timer extends CountDownTimer {
long pause = (Long) null;
public Timer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onTick(long millisUntilFinished) {
content.setText("Tijd over: " + millisUntilFinished / 100);
}
public void onPause(long millisUntilFinished) {
if(pause == null) {
pause = millisUntilFinished;
content.setText("Tijd over: " + millisUntilFinished / 100);
this.cancel();
}
else {
this.start();
}
}
@Override
public void onFinish() {
content.setText("Tijd is op!");
}
}
此类尚未完成,因此请忽略其余代码。
答案 0 :(得分:7)
long pause = (Long) null;
应该是
Long pause = null;
^
long
是原语类型,但Long
是long
类型的包装对象。
您可以使用 sentinel 值,而不是将其包装为对象。
long pause = -1;
...
if(pause == -1 ) {
//do something
}
答案 1 :(得分:4)
long
是java中的基本类型,您不能在其中存储null
。 Null只能存储在类的引用中。将long
替换为Long
,它将起作用,因为Long
是基元的包装器,实际存储引用,可以为null。
请阅读: http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 2 :(得分:4)
long
是原始的。它不能为空。只有对象引用才可以。如果您确实要为数字使用空值,请将类型从“long”更改为Long
。
答案 3 :(得分:3)
变量pause
是long
,因此pause
永远不会是null
,编译器会感到困惑。要么使它成为Long
,要么使用一些无效的带内指示。
答案 4 :(得分:1)
long
是基本类型,它不是class
类型,因此pause
不是对象的“引用”,这意味着它不能是null
。如果您希望能够判断计时器何时暂停,请添加标志变量; boolean
。
您可以将long
更改为Long
,但这似乎没必要,您的代码可能是这样的,并使用boolean
:
public class Timer extends CountDownTimer {
boolean isPaused = true;
long pause = 0; // not sure what this is meant to store
public Timer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onTick(long millisUntilFinished) {
content.setText("Tijd over: " + millisUntilFinished / 100);
}
public void onPause(long millisUntilFinished) {
if(!isPaused) {
isPaused = true;
pause = millisUntilFinished; // don't know what this is for
content.setText("Tijd over: " + millisUntilFinished / 100);
this.cancel();
}
else {
this.start();
isPaused = false;
}
}
@Override
public void onFinish() {
content.setText("Tijd is op!");
}
}
答案 5 :(得分:1)
java语言不像C#那样支持原始类型的可空版本的概念(参见How to present the nullable primitive type int in Java?上的这个问题)。因此,您必须使用Long
类包装器而不是long
基元类型。
public class Timer extends CountDownTimer {
Long pause = null;
// Rest of the code ...
}
这将产生成本,因为每次访问或更新时,Java运行时都必须对您的值进行装箱和取消装箱。根据代码的使用情况,这可能会降低应用程序的性能。这将需要分析。
另一种选择是使用“不可能”的值来表示未初始化的pause
字段。如果您知道pause
始终是肯定的,那么您可以使用-1
来表示未初始化的字段。