Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scala重写使用“0”的Java方法;?扩展;_Scala - Fatal编程技术网

使用Scala重写使用“0”的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

所以我有一个Java方法:

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();
}

在黑暗中拍摄,但是您是否需要在Scala
def
的末尾添加一对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()));
  }
}