【发布时间】:2019-06-25 13:51:12
【问题描述】:
我想知道如何调用有界参数化方法。
例如,我有以下方法:
public static<R extends Reader & Runnable> R foo(R r) {
r.run();
return r;
}
我想知道如何调用这个方法。
我尝试以下代码:
private static class Test extends Reader implements Runnable {
...........
}
private static <T extends extends & Runnable> T getInstance() {
return (T) new Test();
}
public static void main(String[] args) {
foo(getInstance());
}
但我有以下例外:
线程“main”中的异常 java.lang.ClassCastException:无法将类 ent.Main$Test 强制转换为类 java.lang.Runnable(ent.Main$Test 位于加载程序“app”的未命名模块中;java.lang .Runnable 位于加载器“bootstrap”的模块 java.base 中)
我找不到解决办法。
有人能出主意吗?
提前谢谢你!
【问题讨论】:
-
为我工作(Java 10)。您确定您正确粘贴了代码吗?如果你打电话给
foo(new Test())怎么办? -
您的代码无法编译。你有一些错别字。你能把所有的课程都放进去吗,即使它们只是骷髅?并显示哪些类包含其他方法和类。但是当我自己猜测并修改它时,它似乎起作用了。
-
我猜你的意思是
T extends Reader & Runnable,而不是T extends extends & Runnable? -
@Zefick 你是对的。是我错了。事实上,我使用了错误的类。我发现它不起作用很奇怪。非常感谢。