Java 是否可以从模板参数进行扩展?

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

我想装饰一组从公共类(TextView)派生的类。这些类存在于库中,因此我不能简单地修改基或插入到它们的继承层次结构中

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> {
}