2013-10-10 109 views
-3

我必須創建一個類。這個類的實例不能被創建。我怎樣才能做到這一點?如何在java中創建哪個實例無法創建?

+0

你是指一個接口或抽象類? – apparatix

+0

只是普通的類像:public class Class {...} – Pawel

+0

這是一個可接受的重複http://stackoverflow.com/questions/20859137/if-i-do-not-want-to-instantiate-a-class -what-are-my-options – Raedwald

回答

4

聲明它爲抽象並添加一個私有構造函數。

+0

如果您希望將其作爲單例使用,您還可以添加一個getInstance方法,該方法始終可以將相同的實例作爲類中的靜態字段進行處理。如果課程不是抽象的,這將起作用。 – Julien

+0

類必須是抽象的?而這個構造函數應該是什麼(我不需要)? – Pawel

+2

@Pawel如果類不會是'abstract',那麼您將能夠通過反射來實例化它(即使使用私有構造函數)。如果構造函數不是私有的,那麼它可以在該類之外使用(例如,通過同一個包中的類)。 – Pshemo

0

如果你不想實例化那個類,那麼我假設你只希望它有一些靜態方法。在這種情況下,你可以用enum與像

enum MyUtilities{ 
    ;//if you want you can place instances of that class here, or not place any 

    //your methods 
    public static void myMethod(){ 
     System.out.println("hello"); 
    } 
} 
+0

它必須是一個班級。 – Pawel

+0

Enum是一個特殊的類,但仍然是類。 – Pshemo

1

你的意思是沒有實例都不能進行任何常量很容易做到的呢?或只是一個實例?

如果不能創建任何實例,則使用私有構造函數使類最終生成。所有的方法都需要是靜態的。這方面的一個很好的例子是java.lang.Math

如果你只需要一個實例,並希望在有效的Java第二描述編旁若無人地做出新的實例,則可以考慮使用一個枚舉:

public enum MyClass{ 

    INSTANCE; 


    ...methods 
} 

使用這個類的代碼然後調用這樣的方法:MyClass.INSTANCE.foo()

+0

我不想要它的任何實例。類必須是最終的? – Pawel

+1

如果存在私有構造函數,那麼無論如何都沒有人可以繼承它,但也可以使其最終以及向用戶(和編譯器)提供附加提示, – dkatzel