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 – 为什么要编译?代码似乎打破了类型参数的约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3DSMAX和ZBRUSH打造神秘性感美
- 下一篇: C#加密解密DES字符串转