在下面的测试中,TesterClass对其两个类型参数之间的关系设置了约束.方法func2()似乎打破了这个约束,我希望它会在某处导致类型编译错误(在func2的定义中,或者每当类与String之外的任何第二个参数一起使用时),但它不会!

此外,如果我调用func2并将结果保存在适当类型的变量中,则编译失败(在该变量的类型上).但是做同样的事情并保存在更通用的类型(例如Object)中会成功,尽管事实上函数的返回类型在两种情况下都应该具有相同的类型(在向上转换之前).

这里发生了什么?

谢谢!

public class TestGenerics {

public static class ParamedType {}

public class TesterClass, B> {

public TesterClass func() {

return new TesterClass();

}

public TesterClass func2() {

return new TesterClass();

}

}

public Object test() {

// How can I use these type parameters? Doesn't .func2 now have an invalid return type?

TesterClass,Integer> testClass = new TesterClass, Integer>();

//TesterClass, Integer> res2 = testClass.func2(); //

Object res = testClass.func2(); // Compiles

return res;

}

}

编辑:这不能在javac中编译(下面报告的版本).我正在使用Eclipse,并试图找出实际运行的编译器是什么.会更新.可能是JDT(Eclipse编译器)错误.

解决方法:

简单回答:它不能编译,至少在javac 1.7下:

Test.java:10: type parameter A is not within its bound

public TesterClass func2() {

^

where A,B are type-variables:

A extends ParamedType declared in class Test.TesterClass

B extends Object declared in class Test.TesterClass

Test.java:11: type parameter A is not within its bound

return new TesterClass();

^

where A,B are type-variables:

A extends ParamedType declared in class Test.TesterClass

B extends Object declared in class Test.TesterClass

2 errors

你没有说你在编译它是什么 – 我的猜测是你的Java编译器有一个错误.

标签:java,eclipse,compiler-bug,generics,eclipse-jdt

来源: https://codeday.me/bug/20190531/1188938.html

java 编译参数_java – 为什么要编译?代码似乎打破了类型参数的约束相关推荐

  1. java短_Java中的最短代码和最低延迟

    如何编写以最快速度执行的代码,同时仍将编码保持在最低限度? 最短代码和最低延迟 谁能编写具有最低延迟的最短Java代码,以及使用了哪些工具? 更具体地说,目标是开发一个Java应用程序,使用通用解决方 ...

  2. java泛型编程_Java编程泛型限定代码分享

    泛型 一般 出现在集合中,迭代器中 也会出现! 泛型 是为了 提高代码的 安全性. 泛型 确保数据类型的唯一性. 在我们常用的容器中, 越是单一越好处理啊! 泛型的限定: ? 是通配符 指代 任意类型 ...

  3. gradle 编译java配置文件_java – 如何在编译时使gradle使用正确的JDK?

    这比Gradle或Java问题更像是一个过程问题.最终,你必须强迫每个人指定他们的各种JAVA_HOME而不会繁重.你有几个选择: >命令行:./ gradlew -Dorg.gradle.ja ...

  4. cdate在java中_Java Calendar.add方法代码示例

    本文整理汇总了Java中java.util.Calendar.add方法的典型用法代码示例.如果您正苦于以下问题:Java Calendar.add方法的具体用法?Java Calendar.add怎 ...

  5. java 秒表_JAVA计时器秒表程序代码

    <JAVA计时器秒表程序代码>由会员分享,可在线阅读,更多相关<JAVA计时器秒表程序代码(7页珍藏版)>请在人人文库网上搜索. 1.Java计时器(秒表)功能:能实现计时,暂 ...

  6. java 搜索_Java实现搜索功能代码详解

    首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是Get请求,并且是向当前页面发送Get请求 //示例代码 请求路径为当前页面路径 "/product" 当我们要实现多条件搜索 ...

  7. 游侠怎么设置java路径_Java获取当前路径的代码

    1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//use ...

  8. java 自旋_java自旋锁的代码实现

    自旋锁:spinlock 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环耗用CPU import java.util.concurrent ...

  9. Java commit()_Java XAResource.commit方法代码示例

    import javax.transaction.xa.XAResource; //导入方法依赖的package包/类 public void testSuspendableTx() throws E ...

最新文章

  1. linux下的 ifconfig 和 ip 命令
  2. python获取列表中指定元素的下标
  3. OpenCV 霍夫线变换Hough Line Transform
  4. python替换字符的操作_Python 字符串操作(string替换、删除、截取、复制、)
  5. windows渗透大全
  6. Text determination debug
  7. 【渝粤教育】国家开放大学2018年春季 7140-22T危急重症护理学(本) 参考试题
  8. LeetCode 702. 搜索长度未知的有序数组(二分查找)
  9. 异步fifo_跨时钟域同步(异步FIFO)
  10. 虚拟机系列 | JVM类加载机制
  11. kubenetes 1.4 安装后8080端口无法访问
  12. Spring ——《第二章》Spring中的Bean
  13. redis事物的使用
  14. Cesium:鼠标监听事件绑定
  15. 10. 机器人正运动学---姿态描述之欧拉角
  16. 动态规划 最长公共子序列 过程图解
  17. kubectl全部命令用法示例
  18. 华为RPA WeAutomate Studio使用心得
  19. html文本标签练习
  20. 鱼c论坛 python课后题pdf_[全套55讲]鱼C论坛小甲鱼Python的课后题.pdf

热门文章

  1. 前端学习(3265):js中undefine中3相关属性
  2. [html] html的属性值有规定要使用单引号还是双引号吗?
  3. [css] 会引起Reflow和Repaint的操作有哪些?
  4. 工作44:阅读代码1 dictionary
  5. 前端学习(1768):前端调试值之内存监控的原理和方法三
  6. 前端学习(1427):ajax封装二
  7. 前端学习(976):阿里百秀轮播图制作
  8. 前端学习(936):缓动动画原理
  9. 前端学习(924):client系列
  10. 第一百三十三期:MySQL锁会不会,你就差看一看咯