我有類似的接口層次 -Java:如何在界面層次結構中返回聲明的類型?
interface Type
{
Type copy();
};
interface SubType extends Type
{
};
interface SubSubType extends SubType
{
};
而具體的類
public class Concrete implements SubSubType
{
@Override public Concrete copy() { return new Concrete(); }
}
我希望能夠在一個呼叫類型副本(),並得到一個類型回來,調用拷貝()在SubType上並返回一個SubType,這是可以實現的嗎?可能與泛型?
在此先感謝。
這是合法嗎?它如何知道你是否返回一個Type(在Type接口中聲明)或SubType(如在SubType接口中聲明的)?你是通過不尋常的返回類型重載。 (這是Java 7中的新東西,還是我真的落後於時代?) – user949300
@user:這是Java 5中的新功能。它被稱爲[返回類型協變](http://en.wikipedia.org/wiki/Covariant_return_type )。編譯器會認爲靜態返回類型是你調用'copy()'的變量聲明類型的返回類型。換句話說,如果你有一個'Type type = new SubConcrete();''你不能'SubType subType = type.copy()'沒有強制轉換。 –
@Mark Peters謝謝!儘管如此,我仍然覺得很困惑,但我可以看到它可能有用。國際海事組織,我的解決方案更清晰(更明確)。因人而異。 – user949300