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.

  • Tres preguntas sobre hacer un montón de cálculos
  • Simple-XML analiza el feed RSS con 2 que se declara dos veces
  • Mensaje firmado usando OpenSSL; No se puede verificar con Android Java
  • Aplicación de realidad aumentada de Android convertir Lista de ubicación desde el punto de pantalla
  • Obtenga día, mes y año por separado usando SimpleDateFormat
  • Argumento del tipo de método genérico de Java
  • Android .setColor para Icono grande
  • Android ClassNotFoundException: No encontró la clase en el path
  • ¿Cómo puedo compartir varios archivos a través de un intento?
  • Obtener el nombre de ubicación actual del usuario sin necesidad de utilizar gps o Internet, sino mediante Network_Provider en android
  • ¿Por qué no puede OSX detectar Android S Galaxy para la depuración USB?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.