すべてのモデルクラスに特定のupdate
メソッドを実装するアプリケーションがあります。サブクラス宣言の制限
public interface BaseInterface<T>
{
T update(T t);
}
public abstract class BaseClass<T extends BaseClass<T>> implements BaseInterface<T>
{
}
したがって、すべての私のモデルクラスはBaseClass
を拡張します。このために私は次の宣言でabstract class
とinterface
を作成しました。例えばBook
クラス定義は、しかし、私は私のモデルクラスの宣言を制限することはできませんよ上記の構文を使用して
public class Book extends BaseClass<Book>
{
public Book update(Book b)
{
//implementation
}
}
になります。私がそれを制限したい上記を行うには構文的に正しいですが
class Book extends BaseClass<User>
{
public User update(User u)
{
//implementation
}
}
:また、有効な次の宣言をBaseClass<Book>
を拡張するために有効とBook
クラスのために必要である一方、例えば。
私のモデルクラスのupdate
メソッドは、基本的に、独自のクラスのインスタンスをパラメータとしてとり、独自のクラスのインスタンスを返します。すなわち
BaseClass
を拡張するクラスC
がある場合、そのupdate
方法は、正確な署名C update(C c)
でなければなりません。
、または他の言葉でBaseClass
を拡張するクラスC
がある場合は、その後、BaseClass
のテンプレートパラメータがC
自体[すなわちC extends BaseClass<C>
]と他には何もする必要があります。
どのように達成できますか?
注:これは、ここでは、独自のenum
の種類ではなくenum
の他の種類のインスタンスを取るためにcompareTo
メソッドの定義を制限することができますenum
宣言
public class Enum<E extends Enum<E>> implements Comparable<E>
{
int compareTo(E e)
{
}
}
と少し似ています。
ありがとうございます。
神の愛のために 'BaseInterface'と呼ばれるインターフェイスを作成しないでくださいしてください、あなたにも' Zywbxzytdkkenbfd'を呼び出すことができます。それは 'Updateable'と呼ばれるべきです。 – Qwerky
私は質問を明確にするために、インタフェースBaseInterfaceに名前を付けました。私はそれを本番環境で使うつもりはありません。 –