我想避免在java中创建对象期间的构造函数调用(默认构造函数或用户定义的构造函数)。在对象创建期间是否可以避免构造函数调用?
提前致谢......
答案 0 :(得分:2)
只需将要避免的初始化逻辑提取到另一个名为unit的方法中。你无法避免只调用一个构造函数。
答案 1 :(得分:2)
无论您使用何种模式或策略,如果您想创建对象,您都需要调用构造函数。
答案 2 :(得分:0)
实际上,在某些情况下可以使用JVM实现中的类(不属于JRE API并且是特定于实现的)。
这里有一个例子http://www.javaspecialists.eu/archive/Issue175.html
也应该可以使用sun.misc.Unsafe.allocateInstance()(Java7)
此外,当使用clone()方法创建对象的副本时,显然绕过了构造函数(并且该类不会覆盖clone以实现它与Object.clone()方法不同)。
所有这些可能性都带有附加条件,如果有的话应该小心使用。
答案 3 :(得分:0)
您可以模拟类的构造函数。它们仍将被调用,但不会被执行。例如,以下JUnit + JMockit测试执行此操作:
static class CodeUnderTest
{
private final SomeDependency someDep = new SomeDependency(123, "abc");
int doSomething(String s)
{
someDep.doSomethingElse(s);
return someDep.getValue();
}
}
static final class SomeDependency
{
SomeDependency(int i, String s) { throw new RuntimeException("won't run"); }
int getValue() { return -1; }
}
@Test
public void mockEntireClassIncludingItsConstructors()
{
new NonStrictExpectations() {
@Mocked SomeDependency mockDep;
{ mockDep.getValue(); result = 123; }
};
int result = new CodeUnderTest().doSomething("testing");
assertEquals(123, result);
}