使用Scala重写使用“0”的Java方法;?扩展;
所以我有一个Java方法:使用Scala重写使用“0”的Java方法;?扩展;,scala,Scala,所以我有一个Java方法: public abstract List<Class<? extends MyClass>> getListOfClasses(); 最终编辑: 正如下面@AlexeyRomanov所建议的,更改我的Java方法返回类型修复了问题: public abstract List<Class<? extends MyClass<?>>> getListOfClasses(); public abstract L
public abstract List<Class<? extends MyClass>> getListOfClasses();
最终编辑:
正如下面@AlexeyRomanov所建议的,更改我的Java方法返回类型修复了问题:
public abstract List<Class<? extends MyClass<?>>> getListOfClasses();
public abstract List它很难看,但是是一个
工程的替代品。
这种丑陋来自Java无法表达协方差和反方差
接口:
import java.util.List;
public abstract class Game2J {
public interface MyClass {}
public abstract List<Class<? extends MyClass>> getListOfClasses();
}
在黑暗中拍摄,但是您是否需要在Scaladef
的末尾添加一对paren()
?对我来说,这是编译还是做错了什么。看看这个项目:Java签名已经有问题了,因为它使用了原始类型。你能试着把它改成List@AlexeyRomanov谢谢,你的建议奏效了!有关原始类型的更多信息,请参见。
public abstract List<Class<? extends MyClass<?>>> getListOfClasses();
import java.util.List;
public abstract class Game2J {
public interface MyClass {}
public abstract List<Class<? extends MyClass>> getListOfClasses();
}
import java.util
import Game2J.MyClass
import scala.collection.JavaConverters._
class Game2S extends Game2J {
class MyClass1 extends MyClass
class MyClass2 extends MyClass
override def getListOfClasses: util.List[Class[_ <: MyClass]] =
List(classOf[MyClass1], classOf[MyClass2]).asJava.asInstanceOf[util.List[Class[_ <: MyClass]]]
}
public class Game2 {
public static void main(String[] args) {
new Game2S().getListOfClasses().stream().forEach((cl) -> System.out.println(cl.getSimpleName()));
}
}