在Scala中,我需要覆盖以下给定的Java类和方法:
public abstract class AbstractJava<T> {
protected abstract T test(Class<? extends T> clazz);
}
public class ConcreteJava extends AbstractJava<Object> {
@Override
protected Object test(Class<?> clazz) {
return null;
}
}
// Scala
class ConcreteScala extends ConcreteJava {
protected override def test(clazz: Class[_ <: AnyRef]): AnyRef =
super.test(clazz)
}
Run Code Online (Sandbox Code Playgroud)
我收到了编译错误:
error: ambiguous reference to overloaded definition,
both method test in class ConcreteJava of type
(clazz: java.lang.Class[_])java.lang.Object
and method test in class AbstractJava of type
(clazz: java.lang.Class[_ <: java.lang.Object])java.lang.Object
match argument types …
Run Code Online (Sandbox Code Playgroud) 我需要在Scala类中覆盖以下Java方法:
public class Test<T> {
public T test(T o, boolean x) {
if (x) {
return o;
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法(在Scala中),编译器抱怨说,"Null类型的表达式不符合预期的类型T":
class Test2[T] extends Test[T] {
override def test(o: T, x: Boolean): T = {
if (x) {
return o
}
return null
}
}
Run Code Online (Sandbox Code Playgroud)
我也试图定义Option[T]
为返回值,但是再一次,编译器抱怨方法签名不匹配.
任何的想法?- 谢谢!
编辑:
丹尼尔的建议适用于最初发布的问题; 但是,遗憾的是我的实际问题仍然略有不同(通过在方法中使用泛型类型参数,而不是类,定义)(抱歉):
Java的:
public class Test {
public <T> T test(T o, boolean x) {
if (x) {
return o;
} …
Run Code Online (Sandbox Code Playgroud)