簡體   English   中英

無法在泛型方法中返回超類型

[英]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>不能應用於SuperTypeget-put原理的解釋,但是我在這里看不到它如何應用。

感謝<T extends SomeType> ,我們可以確保T始終是SomeType的子類型,對嗎?

對。

那么,為什么不能只返回超類型SomeType呢?

因為它可能不是T

這樣SomeType -假設SomeTypeObjectTString 您建議此代碼應該起作用:

String foo() {
    return new Object();
}

它以一種方式起作用-您可以為聲明為返回超類型的方法返回子類型引用,但這是不同的。

修復很容易-只需將orig更改為T類型:

T orig = super.createSomething();

然后,它可以毫無問題地進行編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM