Java 是否可以从模板参数进行扩展?
我想装饰一组从公共类(TextView)派生的类。这些类存在于库中,因此我不能简单地修改基或插入到它们的继承层次结构中Java 是否可以从模板参数进行扩展?,java,Java,我想装饰一组从公共类(TextView)派生的类。这些类存在于库中,因此我不能简单地修改基或插入到它们的继承层次结构中 class A { } class B extends A { } class C extends A { } class D extends B { void decoration(){} } 在上面的示例中,类D是装饰类。装饰功能对于我的每个装饰类都是通用的 我的问题是,是否可以用Java模板化基类?比如: class D<T> extends
class A {
}
class B extends A {
}
class C extends A {
}
class D extends B {
void decoration(){}
}
在上面的示例中,类D是装饰类。装饰功能对于我的每个装饰类都是通用的
我的问题是,是否可以用Java模板化基类?比如:
class D<T> extends <T ? extends A> {}
D类扩展了{}
那么您的问题是关于动态地将方法添加到现有类中?类似于Objective-C中的类别。这在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);
}
}
接口方法{
公共无效调用(T ref);
}
类MethodForA实现方法{
public void invoke(A ref){..}
}
类方法映射器{
地图、方法
class A {
}
class B<T> extends A {
}
class C<T, U> extends B<T> {
}