4

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

伪代码解释:

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

我必须使用某种构建器类吗?如果是这样,我将如何布置?

编辑:
我觉得我的方法很糟糕,因此我在这里问。进一步说明:

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

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

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

4

3 回答 3

1

与其担心泛型,为什么不研究委托模式呢?您的扩展实体可以实现Entity,将传入的数据存储在私有字段中,并将所有方法调用entity委托给它。Entity它可以在自己的界面上拥有您想要的任何额外方法。

我也不确定你是否完全理解铸造的工作原理。它不会神奇地将一个对象变成另一个对象。A a = (A) b只有当b已经类型A(或子类型)时,强制转换才有效。

于 2012-11-23T10:33:39.983 回答
1

泛型不是为了扩展类。用于指定一个类处理给定的类(或一组类)。例如List<String>是 a Listthat stores String,而不是Object.

并且泛型仅在编译时使用。即使您要求的内容得到支持,在运行时它也会以

  public class myClass extends Object {
    public myClass(Object param) {
    }
  }
于 2012-11-23T09:58:28.403 回答
0

在运行时编译代码似乎可以解决这个问题。另外从前听说过BCEL,你也可以看看。

于 2012-11-23T09:58:04.223 回答