2016-04-11 12 views
1

フレームワークを作成しようとしています。例えば、パー戻り値の型をパラメータとして渡す方法(反射なし?)

このフレームワークは、内部で、インターネットからのデータを解析し、フレームワーク(API)の使用者にこれを提供するために作られ

  • フレームワークは(文字列とクラスBasicUserを持っていますname、long creation)
  • このクラスは基本的な動作を記述する "User"というインターフェースを実装しています。
  • このユーザーは、どこかで言及されるたびに、私は「ユーザー」オブジェクトに

を与え、リスナーのいくつかの種類を呼び出す今、彼らは、ユーザーにアクセスすることができますので、これは、素晴らしいとすべてですが、私は誰が人々をしたいですフレームワークを使用して、独自の実装を行うことができます。

私は彼らに包み込みをさせたくありません。

私のフレームワークを使用する人は、 "BasicUser"をユーザーが作成したクラス( "User"を実装する)に変更できる必要があります。

should be able to change "BasicUser" - >クラス自体を変更するが、代わりに異なる「ユーザーズ実装に新しいユーザーのために作成されますオブジェクトのクラスに変更することができません)を使用せずにこれを実行することが可能です

を反射?

リスナーに渡された「ユーザーオブジェクト」は、フレームワークユーザーがGenericsを使用して提供するクラスに自動的にキャストできますか?

+0

とあなたはインタフェースが/何であるかを知っていますあなたは彼らがあなたのユースケースを助けるだろうか検討してきましたか? –

+0

@DarthAndroidはい!私がやります。私はフレームワークが内部的にそれらを使用できるように私はインターフェイスを使用しています!私は基本的に、BaseUser全体をラップすることなく、自分自身の巨大なジャンボを追加することができるようにしたい、彼らはインターフェイスの必要はありません - 彼らは "BaseUser"(標準の名前と作成日を除く)私は彼ら自身のクラスを彼らに戻したい。 –

+0

これを正しく読んでいるなら、 "User"オブジェクトを取るメソッドを持つフレームワークがあります。 フレームワークのユーザーはBaseUserを拡張せずにユーザーを実装するクラスを作成します。 fameworkには、オブジェクトを渡すのと同じ型(ユーザーを実装するために作成した型)としてオブジェクトをユーザーに返す必要があるメソッドがあります。 これは間違いありませんか? – AAG

答えて

3

タイプのインスタンスを渡します。

<T> T getResult(T instance) { ... } 

Float result = getResult(Float.valueOf(1.0f)); 

または戻り値の型でパラメータ化されたジェネリック型です。

<T> T getResult(Class<T> clazz) { ... } 

String result = getResult(String.class); 

またはパラメータリスト

<T> T getResult(List<T> list) { ... }`. 

List<Integer> list = new ArrayList<>(); 
Integer result = getResult(list); 
+0

ありがとう、Class <>をフィールドに格納すると、これを参照できますか? 私の最善の計画は、 "フレームワーククラス"がインスタンス化され、コンストラクタに戻り型のクラスを与えるときです。同じフィールドを使って何らかの方法でインスタンス化できますか? –

+0

@Jordy yep。 'instanceOfT.getClass()'を渡したい場合、 'Class '型を持っているので、それを格納するパラメータとフィールドにもその型が必要です。 '?しかし、まだ「T」を使用しています。 –

+0

型をパラメータとして渡すことは、これを行うための面倒な方法です。代わりに、パラメータ化された型で呼び出されます。たとえば、 'String result = this。 getResult() ' – AAG

関連する問題