Scala:覆盖返回null的通用Java方法
我需要在Scala类中重写以下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]定义为返回值,但编译器再次抱怨方法签名不匹配 有什么想法吗谢谢 编辑: 丹尼尔的建议适用于最初发布的问题;然而,不幸的是,我的实际问题仍然略有不
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
您可能需要classTest2[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[Tclasstest2[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
}
}
}