2011-12-21 81 views
2

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

public SomeName(int variable) {...} 

,我希望能够调用

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

创建厂的,这似乎是一个矫枉过正,有一个简单的方法来做到这个?

+0

您能扩展这个库类? 还是最后一堂课? – rineez 2011-12-21 11:03:47

+0

我能够做到这一点,我只是希望我可以滥用java来做我的出价。 – JohnEye 2011-12-21 11:19:27

回答

3

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); 
     ... 
    } 
} 
+0

非常感谢,这正是我想知道的。 – JohnEye 2011-12-21 12:33:14

+0

@JohnEye - 不客气。 – lsoliveira 2011-12-22 11:42:02

3

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

3

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

1

extend类,并创建一个新的构造,因为你不能在不改变的lib做到这一点。

+0

但是,我将不得不重构整个程序,对吧? – JohnEye 2011-12-21 11:05:23

+0

只需创建一个扩展实际类的新类,添加自己的构造函数并使用它。这就够了。 – Vaandu 2011-12-21 11:21:48