栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java CRTP和通配符:代码在Eclipse中编译,但不能在`javac`中编译

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java CRTP和通配符:代码在Eclipse中编译,但不能在`javac`中编译

通配符的局限性在于它们会破坏

T extends X<T>
类型参数允许的递归表达式。基于以下几点,我们知道您要执行的操作是安全的:

  1. r.o
    是类型
    T
    (由声明
    R
    ),是或扩展
    N<T>
  2. 该方法
    p
    采用类型的参数
    T
    (由声明
    p
    ),该参数也为或扩展
    N<T>
  3. 因此,即使
    r
    键入为
    R<?>
    ,从
    p(r.o)
    理论上讲呼叫也应该合法。

这可能是eclipse编译器的原因(已知它会为javac没有的某些细微差别提供正确的余量)。

假设您想使用javac进行编译并且不能

v
像您提到的那样更改签名,那么您可以做的最好的事情就是使用原始类型,该类型“选择退出”泛型类型检查:

public void v(final R<?> r) {    //necessary to placate javac - this is okay because [insert above reasoning]    @SuppressWarnings("rawtypes")    N nRaw = r.o;    p(nRaw);}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470245.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号