[英]How to Avoid Constructor calling During Object Creation?
我想避免在java中創建對象期間的構造函數調用(默認構造函數或用戶定義的構造函數)。 在對象創建期間是否可以避免構造函數調用?
提前致謝......
只需將要避免的初始化邏輯提取到另一個名為init的方法中。 你無法避免只調用一個構造函數。
無論您使用何種模式或策略,在某些時候,如果要創建對象,您將需要調用構造函數。
實際上,在某些情況下可以使用JVM實現中的類(它們不屬於JRE API並且是特定於實現的)。
這里有一個例子http://www.javaspecialists.eu/archive/Issue175.html
它也應該可以使用sun.misc.Unsafe.allocateInstance()(Java7)
此外,當使用clone()方法創建對象的副本時,顯然繞過了構造函數(並且該類不會覆蓋clone以實現它與Object.clone()方法不同)。
所有這些可能性都帶有附加條件,如果有的話應該小心使用。
您可以模擬類的構造函數。 它們仍將被調用,但不會被執行。 例如,以下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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.