たとえば、ジェネリッククラスがあるとします。
public class Attribute<T> {
}
特定のタイプに特定のメソッドを使用することは可能ですか? つまり、特定の種類の型のジェネリック クラスを拡張するには?
例えば:
に追加のメソッドを追加したいのですAttribute<String>
が、そうではありませんAttribute<Integer>
。
Java では、そのような直接的な可能性はありません。
ただし、StringAttribute
それを拡張Attribute<String>
して、必要なメソッドを追加することができます。Attribute<Integer>
forInteger
とStringAttribute
forなどを構築する依存性注入の方法で、一種のファクトリを作成できますString
。
直接ではありませんが、これを行うことができます...
public class StringAttribute extends Attribute<String>
{
public String myNewMethod() ...
....
}
次のようなことができます。
public abstract class Attribute<T> {
public abstract T getValue();
}
public class Attr1 extends Atrribute<String> {
@Override
public String getValue() {
return "smth"
}
}
T
ジェネリック型と同じジェネリック型を持つ抽象メソッドを持つ抽象クラスを作成します。次に、ジェネリックの代わりに実オブジェクトを指定することで、他のクラスがそれを拡張できます。
あなたのクラスは抽象的でなければなりません:
public abstract class Attribute<T> {
void someMethod(T object);
}
次に、次のようなサブクラスを追加します。
public AttributeString<T extends String> extends Attribute<T>{
void someMethod(T object){
}
}