necesito para anular el siguiente método Java en una clase Scala:Scala: sobrescribir un método Java genérico que se devuelve un valor nulo
public class Test<T> {
public T test(T o, boolean x) {
if (x) {
return o;
}
return null;
}
}
Con el enfoque siguiente (en Scala), el compilador se queja, "Expresión de tipo Null no se ajusta al tipo T espera ":
class Test2[T] extends Test[T] {
override def test(o: T, x: Boolean): T = {
if (x) {
return o
}
return null
}
}
también he intentado definir Option[T]
como valor de retorno, pero por otra parte, el compilador se queja de que las firmas de los métodos no coincidir.
¿Alguna idea? - ¡Gracias!
Editar:
sugerencia de Daniel trabaja para el problema, ya que originalmente publicada; sin embargo, mi real problema desgracia todavía difiere ligeramente (por tener el parámetro de tipo genérico en el método, no clase, la definición) (lo siento):
Java:
public class Test {
public <T> T test(T o, boolean x) {
if (x) {
return o;
}
return null;
}
}
Scala:
class Test2 extends Test {
override def test[T >: Null](o: T, x: Boolean): T = {
if (x) {
return o
}
return null
}
}
La compilación falla nuevamente con el error "La expresión del tipo nulo no se corresponde con el tipo esperado T".
(creo que es porque el override
no cubre ninguna de las posibilidades - es decir, algo del tipo Nothing
se podría pasar a Test.test(..)
- Bueno, ¿verdad ;-))
Lo que hace el trabajo es lanzar una RuntimeException
en lugar de regresar null
como sugirió Ricky; no obstante, agradecería más aportes.
¡Gracias a todos!
Esa es la solución perfecta para el problema tal como se publicó originalmente; sin embargo, tuve que descubrir que el problema real difiere ligeramente. - Marcaré esto como la solución si no hubiera una respuesta más precisa, pero ¿podrías mirar una vez más la pregunta, ahora editada? - Muchas gracias. – robbbert
Gracias, bien hecho. - Ambas soluciones funcionan (la segunda usando '[T]' como parámetro de tipo), aunque todavía no entiendo completamente el problema ... – robbbert
@robbbert Busca información sobre 'Nothing' y' Null' para entenderlo mejor . –