これは愚かな質問かもしれませんが、私はいくつかの方法があるとしましょう。このメソッドは、ジェネリック型の戻り値の型を持つかもしれませんが、このメソッドが返すクラスを決定することを望みます。意味は、メソッドを呼び出す時には知られていません。例:クラスジェネリックス - 返すメソッドの型を決める
public <U> SomeWrappingClass<U> execute() {
if (..) return new SomeWrappingClass<Foo>();
else return new SomeWrappingClass<Bar>();
}
SomeWrappingClass c = obj.execute();
c.barMethod() // in case of SomeWrappingClass<Bar> returned
c.fooMethod() // in case of SomeWrappingClass<Foo> returned
私はそれが動作しないと思いますし、タイプはメソッドコールの時点で知られていなければなりません。たぶん、返されたオブジェクトのいくつかのメンバーを介してのみ、またはメソッドのパラメータとしてジェネリックでRunnableの呼び出しを介して?例えば
public SomeReturnObject execute() {
SomeReturnObject o = new SomeReturnObject();
if (..)
o.returnObj = new SomeWrappingClass<Foo>();
else
o.returnObj = new SomeWrappingClass<Bar>();
}
今私が編集
SomeWrappingClass
の場合にo.returnObj.barMethod()を呼び出すことができます。それのでResultObjectがあまりにソリューションではありません、(ResultObject < T>のようなジェネリック医薬品を有する少なくともResultObject)それがないと同じ状況です).. ..何とかクラスを返さない限り、呼び出し元はクラスを知っていますが、呼び出し時に知らなければならないClass < T>のような、それは再び不可能です。
'SomeWrappingClass >'を使用できますか? –
>私は返すものの中でメソッドを決めることができますか? – luky
@luky >は、呼び出し元が正確に何が返されるかを決して知ることができないことを意味します。 – Lino