为了账号安全,请及时绑定邮箱和手机立即绑定

如何调用有界JAVA的泛型参数化方法?

如何调用有界JAVA的泛型参数化方法?

慕运维8079593 2023-02-16 16:56:15
我想知道如何调用有界参数化方法。例如,我有以下方法:  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 中)而且我找不到解决方案。有人可以有想法吗?先感谢您 !
查看完整描述

1 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

这:

private static <T extends Reader & Runnable> T getInstance() {

意味着该方法可以返回可以转换为任何既扩展Reader又实现的类的东西Runnable。但是,只有一个这样的值可以安全地返回:

return null;

其他任何事情都可能导致ClassCastException. 特别是,return new Test();只有当您碰巧在期望收到Test.

通常,如果形式参数中没有特征,则无法T从方法中安全地返回非空值。有关详细信息,请参阅Error Prone 的检查T文档。TypeParameterUnusedInFormals

如果要返回Testfrom的实例getInstance(),请删除泛型并设置返回类型Test

private static Test getInstance() {
    return new Test(); 
}


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 64 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信