Scala:覆盖返回null的泛型Java方法
我需要在
Scala类中覆盖以下
Java方法:
public class Test<T> { public T test(T o,boolean x) { if (x) { return o; } return null; } } 使用以下方法(在Scala中),编译器抱怨说,“Null类型的表达式不符合预期的类型T”: class Test2[T] extends Test[T] { override def test(o: T,x: Boolean): T = { if (x) { return o } return null } } 我还尝试将Option [T]定义为返回值,但是再一次,编译器抱怨方法签名不匹配. 任何的想法? – 谢谢! 编辑: 丹尼尔的建议适用于最初发布的问题;但是,遗憾的是我的实际问题仍然略有不同(通过在方法中使用泛型类型参数,而不是类,定义)(抱歉): Java的: public class Test { public <T> T test(T o,boolean x) { if (x) { return o; } return null; } } 斯卡拉: class Test2 extends Test { override def test[T >: Null](o: T,x: Boolean): T = { if (x) { return o } return null } } 再次编译失败,错误为“类型Null的表达式不符合预期类型T”. 正如Ricky建议的那样,工作是抛出RuntimeException而不是返回null;尽管如此,我还要感谢你们的进一步投入. 谢谢大家! 解决方法
你需要这个:
class Test2[T >: Null] extends Test[T] { 问题是Nothing不能为null,并且,作为所有内容的子类型,它是T的有效值.因此,您需要将Null指定为下限. 编辑 不幸的是,你的实际问题并没有好办法.在这种情况下,你必须写null.asInstanceOf [T]并保留它. 并且,是的,您可以使用非可空类型调用它.试试这个,例如: object Test3 { val test = new Test(); val x: Int = test.test(5,false); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |