1
A
回答
2
只需提取要避免進入稱爲init,另一種方法intialization邏輯。你無法避免只調用一個構造函數。
2
無論您使用何種模式或策略,在某些時候,如果您想創建對象,您將需要調用構造函數。
0
事實上,在某些情況下,它可能會使用JVM實現中的類(它們不屬於JRE API並且是實現特定的)。
一個例子這裏http://www.javaspecialists.eu/archive/Issue175.html
它也應該可以使用sun.misc.Unsafe.allocateInstance()(Java7)
而且,使用clone()時的構造顯然是繞過 - 方法創建一個對象的副本(並且該類不覆蓋克隆以實現與Object.clone()方法不同的方法)。
所有這些可能性都附帶了字符串,應該小心使用,如果有的話。
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);
}
相關問題
- 1. 如何在創建對象數組時避免默認的構造函數?
- 2. 何時調用構造函數創建對象
- 3. 爲什麼在創建對象時調用構造函數?
- 4. Digester 3在創建對象時調用構造函數兩次
- 5. 如何避免在C++中調用祖父構造函數?
- 6. 如何避免構造函數的調用?
- 7. C++對象創建和構造函數
- 8. 如何使用在子構造函數中創建的對象構造父類
- 9. LuaJ如何在調用對象上運行函數(LuaJ正在創建新對象如何避免它)
- 10. C#創建對象比構造函數調用慢得多
- 11. 如何在不調用構造函數的情況下創建對象?
- 12. 在堆(Java)上創建對象之後調用對象的構造函數嗎?
- 13. 如何在模塊中創建JavaScript對象構造函數?
- 14. C++避免構造一個對象
- 15. 每次在java中調用構造函數時是否創建對象?
- 16. 重載構造函數時如何避免NullReferenceException?
- 17. 如何避免轉換函數中的複製構造函數?
- 18. 手動對象構造函數調用
- 19. 在對象中創建鍵時,我們如何避免?
- 20. 避免默認的構造函數
- 21. 避免向量拷貝構造函數
- 22. 如何重用對象構造函數?
- 23. 如何爲ndb Query構造函數創建datastore_query.Order對象?
- 24. 使用SQL Alchemy避免創建對象
- 25. 在原型構造函數中創建對象引用
- 26. 如何在JavaScript中的對象上調用構造函數?
- 27. 如何在構造函數調用方法中創建變量?
- 28. 當在js模塊中定義對象構造函數時,從C調用JS對象構造函數
- 29. 如何避免使用插入迭代器調用複製構造函數
- 30. 如何在其他構造函數中調用構造函數?
您能給出更多的背景嗎?你爲什麼想這樣做? – assylias 2013-02-13 11:37:39
簡單的回答:不,這是不可能的。 – jlordo 2013-02-13 11:40:15
你想阻止你的類的用戶執行'new MyClass()'和/或'new MyClass(args ...)'嗎?你是這個意思嗎 ? – A4L 2013-02-13 11:41:24