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. 爲什麼在創建對象時調用構造函數?
- 6. 如何避免在C++中調用祖父構造函數?
- 7. 未由構造函數調用paintcomponent或創建對象時
- 8. 在構造函數中創建對象
- 9. 複製構造函數調用默認構造函數以創建對象
- 10. 如何避免構造函數的調用?
- 11. 如何使用在構造函數中創建的對象
- 12. 構造函數創建const對象
- 13. C++對象創建和構造函數
- 14. 從構造函數創建對象
- 15. 如果構造函數在另一個函數內,新創建的對象調用構造函數undefined
- 16. 如何使用在子構造函數中創建的對象構造父類
- 17. 如何在構造函數的原型不是對象時創建對象?
- 18. 如何在實例化對象時調用父構造函數?
- 19. 如何避免構造函數在頁面定義兩次時調用兩次
- 20. LuaJ如何在調用對象上運行函數(LuaJ正在創建新對象如何避免它)
- 21. 如何在另一個構造函數中調用對象構造函數?
- 22. C#創建對象比構造函數調用慢得多
- 23. 沒有構造函數調用的C++對象創建
- 24. Scala:通過調用構造函數創建單例對象
- 25. C++的構造函數調用和對象創建
- 26. 如何在不調用構造函數的情況下創建對象?
- 27. 如何在不調用構造函數的情況下創建對象?
- 28. 構造函數和析構函數調用涉及對象的創建
- 29. 在堆(Java)上創建對象之後調用對象的構造函數嗎?
- 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