[英]how to call a generic parameterized method bounded JAVA?
我想知道如何调用有界参数化方法。
例如,我有以下方法:
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());
}
但是我有以下例外:
线程“主”中的异常java.lang.ClassCastException:类ent.Main $ Test无法转换为类java.lang.Runnable(ent.Main $ Test在加载程序“ app”的未命名模块中; java.lang.Runnable是在加载程序'bootstrap'的模块java.base中)
而且我找不到解决方案。
有人可以有个主意吗?
先感谢您 !
这个:
private static <T extends Reader & Runnable> T getInstance() {
意味着该方法可以返回可以转换为任何类的类, 这些类既扩展Reader
并实现Runnable
。 但是,只有一个这样的值可以从中安全返回:
return null;
任何其他情况都可能导致ClassCastException
。 特别是, return new Test();
仅当您恰好在期望接收Test
的上下文中被调用时,才会成功。
通常,如果T
在形式参数中不存在,则无法从方法安全地返回非空T
有关更多详细信息,请参见易错的TypeParameterUnusedInFormals
检查的文档。
如果要从getInstance()
返回Test
的实例,请删除泛型并使返回类型为Test
。
private static Test getInstance() {
return new Test();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.