所以你的问题是关于向现有类动态添加方法?类似于 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> {
}
是的。您可以通过引入类型参数来使子类成为泛型。