【发布时间】:2018-06-28 12:42:59
【问题描述】:
我想存储一个函数以应用于类的任何实例。由于我想为不同的类执行此操作,因此我在存储和应用代码时使用了一个接口。但是我的类型变量有一些问题:
我有一个界面
public interface SomeInterface<P>
还有一个实现类
public class SomeClass implements SomeInterface<Object>
以及处理程序
public class SomeHandler {
public <R> void someMethod(Function<SomeInterface<R>,R> someFunction) {}
}
还有代码
public void someTest() {
Function<SomeClass,Object> someFunction = a -> new Object();
SomeHandler handler = new SomeHandler();
handler.someMethod(someFunction); //error here
}
不会工作。
标记位置的错误是“不存在类型变量R的实例,因此SomeClass符合SomeInterface”
我已经尝试使用抽象类而不是接口。这也不起作用。
我做了一些研究,发现了一个包含 lambda 表达式的错误。删除 lambda 表达式并没有解决问题。 另一个页面提示了 OpenJdk 中的一个错误,建议更改类型变量的顺序。由于我使用的是 java Function 类,所以我无法做到这一点。
我也尝试获取Oracle Jdk,但我不能在这台机器上做任何事情。
欢迎任何想法!
【问题讨论】:
标签: java function generics interface abstract