6

我正在试验 Java 模块系统。我正在尝试将 ServiceLoader 用于通用接口。它有效,但我在模块信息中收到警告。这是我的最小代码

module testProvideWith {
  provides ServiceGeneric with SString;
  uses ServiceGeneric;
}
public interface ServiceGeneric<T> {
  T getT();
}
public class SString implements ServiceGeneric<String>{
  public String getT() {return "Hello";}
}

当我尝试时收到警告我并不感到惊讶

ServiceGeneric<String> serv=ServiceLoader.load(ServiceGeneric.class).findFirst().get();

我知道通用擦除,我知道我必须使用注释或其他技巧来注释正确的服务。但是......根本没有提到我能找到的通用服务。我希望能够写出类似的东西

module testProvideWith {
  provides ServiceGeneric<String> with SString;
  uses ServiceGeneric<String>;
  //more cases could be added
}
...
ServiceLoader.load(ServiceGeneric.class,String.class)

模块和加载程序在哪里合作以跟踪可用的通用版本..但是......什么都没有......没有任何人考虑过这种可能性......我错过了什么?

4

0 回答 0