2016-05-25 6 views
0

私は継承クラスとジェネリッククラスにいくつか問題があります。私は、汎用のメタタイプを持つ親クラスのオブジェクトを返す関数にサブクラス(特定の汎用タイプを持つ)のオブジェクトを戻したいと思います。一般的なメタタイプ関数で特定のメタタイプを持つオブジェクトを返す

多かれ少なかれ、私はクラスや関数のこのような構造を持っている:私は行うことはできません

class Element {} 
class Item:Element {} 

class A<aType:Element> { } 
class B:A<Item> { } 

class SomeClass { 
    func foo() -> A<Element> { 
     return A<Element>() 
    } 
} 
class OtheClass:SomeClass { 
    override func foo() -> A<Element> { 
     return B() // An error where! 
    } 
} 

事がOtherClassの関数fooでreturn B()です。エラーは次のとおりです。

はタイプ を返すためにタイプ「B」のreturn式を変換できません「<要素>」

それをする方法はありますか?

答えて

0

私が見つけた解決策は次のとおりです。

class CoreElement {} 
class CoreItem:CoreElement {} 

class CoreA<aType:CoreElement> { } 
class CoreB:CoreA<CoreItem> { } 

class CoreSomeClass<T:CoreElement> { 
    func foo() -> CoreA<T> { 
     return CoreA<T>() 
    } 
} 
class CoreOtherClass:CoreSomeClass<CoreItem> { 
    override func foo() -> CoreA<CoreItem> { 
     return CoreB() 
    } 
} 
関連する問題