if (pausa == null) {no funciona

Utilizo if(pause == null) para hacer algo cuando la pause es null . Pero consigo el error

the operator == is undefined for the argument type(s) long,null

Aquí está el código,

 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!"); } } 

Esta clase no está terminada, así que ignore el resto del código.

La pause variable es long , por lo que la pause nunca puede ser null , y el compilador está confundido. Haga un Long , o use algún indicador de invalidez dentro de la banda.

 long pause = (Long) null; 

debiera ser

 Long pause = null; ^ 

long es el tipo primitivo, pero Long es el objeto wrapper de tipo long .

Puede utilizar un valor de centinela en lugar de envolverlo como objeto.

 long pause = -1; ... if(pause == -1 ) { //do something } 

long con un lowecase 'l' es un tipo primitivo en java, y no se puede almacenar null en él. Null sólo se puede almacenar en referencias a clases. reemplazar el long con Long , y funcionará, porque Long es un envoltorio para el primitivo, en realidad el almacenamiento de una referencia, que puede ser nulo.

Por favor, lea: http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

long es primitivo. No puede ser nulo. Sólo las referencias a objetos pueden ser. Si realmente desea utilizar valor nulo para los números cambie el tipo de 'largo' a Long .

long es un tipo primitivo, no es un tipo de class y por lo tanto pause no es una "referencia" a un objeto, lo que significa que no puede ser null . Si desea saber cuándo el temporizador está pausado, agregue una variable de indicador ; un boolean .

Usted podría cambiar long a Long pero que parece innecesario, su código podría ser algo como esto y utilizar un 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!"); } } 

El lenguaje java no soporta la noción de versión anulable de tipos primitivos como C # (vea esta pregunta sobre cómo presentar el tipo primitivo anulable int en Java? ). Por lo tanto, tendrá que utilizar el contenedor de clase Long lugar del tipo primitivo long .

 public class Timer extends CountDownTimer { Long pause = null; // Rest of the code ... } 

Esto tendrá un costo porque el tiempo de ejecución de Java tendrá que encajar y deshacer su valor cada vez que lo acceda o lo actualice. Dependiendo del uso de su código, esto puede degradar el rendimiento de su aplicación. Esto necesitará perfiles.

Otra opción es utilizar un valor que es "imposible" para representar un campo de pause no inicializado. Si sabe que la pause siempre será positiva, puede usar -1 para representar un campo no inicializado.

  • Android hamburguesa / flecha icono cambio dinámico color
  • NetBeans no quiere construir (importar) soporte para Android
  • Implementación de Autocompletar con ListView en Android
  • El temporizador Android llega tarde cuando la pantalla del teléfono está bloqueada
  • MediaRecord no pudo iniciar el emulador Android 7.1.1
  • Función para traducir las coordenadas finales de una línea
  • StartActivityForResult de un servicio
  • RxAndroid y Retrofit: No se puede crear el adaptador de llamada para io.reactivex.Observable <retrofit2.Response <okhttp3.ResponseBody >>
  • Clase de aplicación que se ejecuta en el hilo de interfaz de usuario o?
  • Cómo crear una aplicación utilizando maven
  • PorterduffXfermode: borra una sección de un mapa de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.