如何在java中动态扩展一个类?

时间:2012-11-23 09:53:42

标签: java oop generics wildcard

我尝试根据传递给构造函数的参数的本机类型动态扩展对象。
我已经阅读了一些java泛型和通配符,但我似乎无法找到一个好方法。

伪代码解释:

public class myClass extends <?> {
    // Constructor
    public myClass(<?> param) {
    }
}

我是否必须使用某种类型的构建器类?如果是这样,我将如何解决这个问题?

修改
我有一种感觉,我的方法非常糟糕,因此我在这里问。进一步解释:

我有一个带有许多子接口的接口,其中一些子接口也有子接口。出于我的目的,我无法编辑超级界面来添加方法,因为它是一个API。我有一个事件,它传递给我一个子接口,我希望能够转换为我自己的对象,它有更多的方法和属性,但我仍然想要访问子接口的方法。

例如,子接口称为实体。我可以做myClass extendedEntity = new myClass(entity),它有我想要公开的新方法。如果我将传递的子接口作为对象的属性,我可以extendedEntity.entity.originalMethod()来访问子接口中包含的方法。但我希望将其设为extendedEntity.originalMethod()以及extendedEntity.addedMethod()

这对任何人都有意义吗?有什么明显的我可以做的,我错过了吗? (作为一名机械工程师,java是一种爱好,请原谅我!)

3 个答案:

答案 0 :(得分:1)

泛型不是为了扩展课程。用于指定类处理给定的类(或类集)。例如,List<String>List,用于存储String,而不是Object

仿制药仅在编制时使用。即使您要求的内容得到支持,在运行时也会以

结尾
  public class myClass extends Object {
    public myClass(Object param) {
    }
  }

答案 1 :(得分:1)

为什么不调查委托模式,而不是担心泛型?您的extendedEntity可以实现Entity,将传入的entity存储在私有字段中,并将所有Entity方法调用委托给它。它可以在自己的界面上拥有您想要的任何额外方法。

我不确定你是否完全理解铸造是如何工作的。它并没有神奇地将一个物体变成另一个物体。仅当A a = (A) b 类型b(或子类型)时,广告A才有效。

答案 2 :(得分:0)

在运行时编译代码似乎是合理的解决这个问题。我也曾经听过BCEL,你也可以看一下。