それで、あなたの質問は、既存のクラスに動的にメソッドを追加することについてですか?Objective-Cのカテゴリに似たもの。クラスがClassLoaderを介してロードされると、動的に何も追加できないため、これをJavaで行うのは簡単ではありません。
私の頭に浮かぶ最も簡単なことは、万が一既存のクラスの外部にあるカスタムマッピングを提供することです。何かのようなもの:
interface Method<T extends A> {
public void invoke(T ref);
}
class MethodForA implements Method<A> {
public void invoke(A ref) { .. }
}
class MethodMapper {
Map<Class<?>, Method<? extends A>> mapping;
MethodMapper() {
mapping = new HashMap<Class<?>, Method<? extends A>>();
mapping.put(A.class, new MethodForA());
}
void invoke(A object) {
Method<? extends A> method = mapping.get(object.getClass());
if (method != null) {
method.invoke(object);
}
}
私は今この定型コードを書いたばかりなので、すべてが確実に正しくなるわけではありませんが、それが機能する方法はこれです。やみくもにキャストしないように、ランタイムタイプチェックを行う必要があると思います。
代わりに、これが合法かどうか疑問に思っていた場合:
class A {
}
class B<T> extends A {
}
class C<T, U> extends B<T> {
}
はい、そうです。typeパラメーターを導入することで、子クラスをジェネリックにすることができます。