![](/img/trans.png)
[英]Is there a way to return a generic supertype without casting in Java?
[英]Cannot return supertype in generic method
一些示例代碼:
public class Main {
class SomeType {
}
class A {
protected <T extends SomeType> T createSomething()
{
return null; // Don't worry about this.
}
}
class B extends A {
@Override
protected <T extends SomeType> T createSomething()
{
SomeType orig = super.createSomething();
// do some stuff with orig
return orig;
}
}
}
我這是怎么了?
在線上
return orig;
編譯器吐出的錯誤是
Type mismatch: cannot convert from Main.SomeType to T
感謝<T extends SomeType>
,我們可以確保T
始終是SomeType
的子類型,對嗎? 那么,為什么不能只返回超類型SomeType
呢?
我已經讀過<? 擴展SuperType>不能應用於SuperType和get-put原理的解釋,但是我在這里看不到它如何應用。
感謝
<T extends SomeType>
,我們可以確保T
始終是SomeType
的子類型,對嗎?
對。
那么,為什么不能只返回超類型
SomeType
呢?
因為它可能不是T
!
這樣SomeType
-假設SomeType
是Object
, T
是String
。 您建議此代碼應該起作用:
String foo() {
return new Object();
}
它以另一種方式起作用-您可以為聲明為返回超類型的方法返回子類型引用,但這是不同的。
修復很容易-只需將orig
更改為T
類型:
T orig = super.createSomething();
然后,它可以毫無問題地進行編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.