java 编译参数_java – 为什么要编译?代码似乎打破了类型参数的约束
在下面的测试中,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 – 为什么要编译?代码似乎打破了类型参数的约束相关推荐
- java短_Java中的最短代码和最低延迟
如何编写以最快速度执行的代码,同时仍将编码保持在最低限度? 最短代码和最低延迟 谁能编写具有最低延迟的最短Java代码,以及使用了哪些工具? 更具体地说,目标是开发一个Java应用程序,使用通用解决方 ...
- java泛型编程_Java编程泛型限定代码分享
泛型 一般 出现在集合中,迭代器中 也会出现! 泛型 是为了 提高代码的 安全性. 泛型 确保数据类型的唯一性. 在我们常用的容器中, 越是单一越好处理啊! 泛型的限定: ? 是通配符 指代 任意类型 ...
- gradle 编译java配置文件_java – 如何在编译时使gradle使用正确的JDK?
这比Gradle或Java问题更像是一个过程问题.最终,你必须强迫每个人指定他们的各种JAVA_HOME而不会繁重.你有几个选择: >命令行:./ gradlew -Dorg.gradle.ja ...
- cdate在java中_Java Calendar.add方法代码示例
本文整理汇总了Java中java.util.Calendar.add方法的典型用法代码示例.如果您正苦于以下问题:Java Calendar.add方法的具体用法?Java Calendar.add怎 ...
- java 秒表_JAVA计时器秒表程序代码
<JAVA计时器秒表程序代码>由会员分享,可在线阅读,更多相关<JAVA计时器秒表程序代码(7页珍藏版)>请在人人文库网上搜索. 1.Java计时器(秒表)功能:能实现计时,暂 ...
- java 搜索_Java实现搜索功能代码详解
首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是Get请求,并且是向当前页面发送Get请求 //示例代码 请求路径为当前页面路径 "/product" 当我们要实现多条件搜索 ...
- 游侠怎么设置java路径_Java获取当前路径的代码
1.利用System.getProperty()函数获取当前路径: System.out.println(System.getProperty("user.dir"));//use ...
- java 自旋_java自旋锁的代码实现
自旋锁:spinlock 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环耗用CPU import java.util.concurrent ...
- Java commit()_Java XAResource.commit方法代码示例
import javax.transaction.xa.XAResource; //导入方法依赖的package包/类 public void testSuspendableTx() throws E ...
最新文章
- linux下的 ifconfig 和 ip 命令
- python获取列表中指定元素的下标
- OpenCV 霍夫线变换Hough Line Transform
- python替换字符的操作_Python 字符串操作(string替换、删除、截取、复制、)
- windows渗透大全
- Text determination debug
- 【渝粤教育】国家开放大学2018年春季 7140-22T危急重症护理学(本) 参考试题
- LeetCode 702. 搜索长度未知的有序数组(二分查找)
- 异步fifo_跨时钟域同步(异步FIFO)
- 虚拟机系列 | JVM类加载机制
- kubenetes 1.4 安装后8080端口无法访问
- Spring ——《第二章》Spring中的Bean
- redis事物的使用
- Cesium:鼠标监听事件绑定
- 10. 机器人正运动学---姿态描述之欧拉角
- 动态规划 最长公共子序列 过程图解
- kubectl全部命令用法示例
- 华为RPA WeAutomate Studio使用心得
- html文本标签练习
- 鱼c论坛 python课后题pdf_[全套55讲]鱼C论坛小甲鱼Python的课后题.pdf