2017-09-07 14 views
1

BaseEntityオブジェクトとそれを修正する方法は?Javaのジェネリックと基本クラス

+5

なぜBaseEntity値を受け入れるのですか? 'createOrUpdate'を' T'を受け入れると宣言しました。 –

+2

具体的な例でクラスを置き換えると理解しやすいことがよくあります。 T =バナナ。 BaseEntity = Fruit。メソッドcreateOrUpdate(Banana)を定義し、これをFruit型の引数で呼び出します。フルーツは必ずしもバナナではありません。したがって、コンパイラはメソッド呼び出しを受け付けません。 –

+0

しかしTはBaseEntityとサブクラスを受け入れると宣言されています。今すぐBaseEntityを受け入れない理由を理解していません。 – alexanoid

答えて

2

事は、Tは必ずしもBaseEntityである必要はありません。あなたはそのようなクラスBaseDaoImplをインスタンス化できます。

class Widget extends BaseEntity {...} 
BaseDaoImpl<Widget> base = new BaseDaoImpl<>(); 

この場合、TWidgetあり、そのための方法createOrUpdate(...)は次のようになります。

public Widget createOrUpdate(Widget t, User user) { 

とあなただけBaseEntityとそれを呼び出すことはできません。

T baseEntity = findBaseEntityById(entityType, entityId); 

+0

ところで、おそらく、createErUpdateを変更してBaseEntityを受け入れて返すことができます。 – Jamie

1

変更

BaseEntity baseEntity = findBaseEntityById(entityType, entityId); 

私はBaseDao<T>.findBaseEntityById()はタイプTを返していることを前提としています。そうでなければ、それはすべきです! :-)

0

"T extends BaseEntity"がBaseEntityをカバーし、 "T"をパラメータとして渡すことができると期待しています。そのような運がない私の友人。ジェネリックの理解を確認してください。

関連する問題