Итак, ваш вопрос заключается в динамическом добавлении метода к существующим классам? Что-то похожее на категории в Objective-C. Это не так просто сделать на Java, поскольку, как только класс загружается через ClassLoader, вы не можете ничего добавить к нему динамически.
Простейшая вещь, которая приходит мне в голову, заключается в том, чтобы предоставить настраиваемое сопоставление, которое может быть случайным, внешним по отношению к существующим классам. Что-то вроде:
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> {
}
Да, это так. Вы можете создать дочерний класс, указав параметр типа.