以下工廠建構式示例(使用靜態方法)編譯良好:
class Base<T> {
Base();
static Base myFactory(bool isInt) {
if (isInt) { return A(); }
else { return B(); }
}
}
class A extends Base<int> {}
class B extends Base<String> {}
但是,如果我使用工廠建構式的語法:
class Base<T> {
Base();
factory Base.myFactory(bool isInt) {
if (isInt) { return A(); }
else { return B(); }
}
}
class A extends Base<int> {}
class B extends Base<String> {}
我得到:
A value of type 'A' can't be returned from the method 'myStatic' because it has a return type of 'Base<T>'.
為什么這是一個錯誤?A
是 的子型別Base<int>
,那么它不是泛型的子型別Base<T>
嗎?
uj5u.com熱心網友回復:
如果不指定型別,則dynamic
默認為。因此,在第一種情況下,myFactory
方法的回傳型別是Base<dynamic>
,而在另一種情況下,Base.myFactory
方法的回傳型別是Base<T>
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/535052.html
標籤:镖