Scala:覆盖返回null的通用Java方法

Scala:覆盖返回null的通用Java方法,scala,Scala,我需要在Scala类中重写以下Java方法: public class Test<T> { public T test(T o, boolean x) { if (x) { return o; } return null; } } 我还试图将选项[T]定义为返回值,但编译器再次抱怨方法签名不匹配 有什么想法吗谢谢 编辑: 丹尼尔的建议适用于最初发布的问题;然而,不幸的是,我的实际问题仍然略有不

我需要在Scala类中重写以下Java方法:

public class Test<T> {
    public T test(T o, boolean x) {
        if (x) {
            return o;
        }
        return null;
    }
}
我还试图将
选项[T]
定义为返回值,但编译器再次抱怨方法签名不匹配

有什么想法吗谢谢


编辑:

丹尼尔的建议适用于最初发布的问题;然而,不幸的是,我的实际问题仍然略有不同(方法中有泛型类型参数,而不是类定义)(抱歉):

爪哇:

编译再次失败,错误为“Null类型的表达式不符合预期的t类型”。
(我认为这是因为
覆盖
没有涵盖任何可能性,即
类型的东西无法传递给
测试。测试(…)
-嗯,可以吗?;-))

工作原理是抛出一个
RuntimeException
,而不是像Ricky建议的那样返回
null
;尽管如此,我还是非常感谢您的进一步投入


谢谢大家

T
是不受限制的,因此它可以是任何类型,包括
Int
Double
Float
AnyVal
的其他子类型,这些子类型不能为
null

您可能需要class
Test2[T您需要:

class Test2[T >: Null] extends Test[T] {
问题是,
Nothing
不能为
null
,并且作为所有内容的子类型,它是
T
的有效值。因此需要将
null
指定为下限

编辑

不幸的是,没有解决实际问题的好方法。在这种情况下,您必须编写
null.asInstanceOf[T]
,并将其保留

是的,您可以使用不可为null的类型调用它。请尝试以下操作,例如:

object Test3 {
  val test = new Test();
  val x: Int = test.test(5, false);
}

您是否考虑过使用选项来替代以下选项:

class Test{
  def test[T] (value:T,flag :Boolean) :Option[T] = {
    if (flag){
      Some(value)
    }else{
      None
    }
  }
}

它将有助于区分像
test(null,true)
test(null,false)

这就是我的想法,但是
def z[T
classtest2[T
[这是最初发布的问题的完美解决方案;但是,我必须找出实际问题略有不同。-如果没有更准确的答案,我会将此标记为解决方案,但请您再次查看-现在已编辑-问题。-非常感谢。谢谢,做得好。-两种解决方案都有效(第二个使用
[T]
作为类型参数),虽然我还没有完全理解这个问题…@Robbert搜索
Nothing
Null
的信息以更好地理解它。谢谢,但是(如原始问题中所述)这是一个不同于重写方法的方法签名。
class Test2[T >: Null] extends Test[T] {
object Test3 {
  val test = new Test();
  val x: Int = test.test(5, false);
}
class Test{
  def test[T] (value:T,flag :Boolean) :Option[T] = {
    if (flag){
      Some(value)
    }else{
      None
    }
  }
}