【问题标题】:Overloading library class constructor重载库类构造函数
【发布时间】:2011-12-21 10:50:01
【问题描述】:

我正在处理以下问题。我正在使用一个库,并希望重载该库中类的构造函数以更好地满足我的需求。库类提供了这样的构造函数:

public SomeName(int variable) {...}

我希望能够打电话

public SomeName(int variable, float myVariable) {...}

为此创建一个工厂似乎有点过头了,有没有简单的方法可以做到这一点?

【问题讨论】:

  • 你能扩展这个库类吗?还是最后一堂课?
  • 我能做到,我只是希望我能滥用 java 来做我的投标。

标签: java constructor overloading


【解决方案1】:

Java 语言不提供任何允许您在不更改类代码本身的情况下更改超类的构造函数的高级构造。

也就是说,还有其他选择。主要是,您可以使用cglib 将字节码“注入”到库中并创建自己的构造函数(通过几种高级技术)。

这绝对推荐用于大多数编码任务和解决您的问题的最佳方法(假设您没有做不重要的事情),只是将该类子类化:

class SomeName {
    public SomeName(int variable) {
        ...
    }
}

class OtherName extends SomeName {
    public OtherName(float otherVariable) {
        this(*DEFAULT*, otherVariable);
    }

    public OtherName(int variable, float otherVariable) {
        super(variable);
        ...
    }
}

【讨论】:

  • 非常感谢,这正是我想知道的。
【解决方案2】:

如果不更改库,您将无法做到这一点。

【讨论】:

    【解决方案3】:

    子类化该类并添加新的构造函数:)

    【讨论】:

      【解决方案4】:

      extend 类并创建一个新的构造函数,因为你不能不改变库。

      【讨论】:

      • 只需创建一个扩展您的实际类的新类,添加您自己的构造函数并使用它。就够了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多