3

短い:

コンストラクターを除外する以外に何か他のことをする必要がありますか?

長いです:

インスタンス化できないクラスを実装したい。ここでMathクラスの例を見つけました: http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

だから私は同じことを書くでしょう:

public final class MyClass{

    public static int doubleMe(int x){
        return 2*x;
    }
}

コンストラクターが存在しないため、インスタンス化は不可能なはずです。

しかし、クラスを最終的なものにするかどうかはわかりません。たぶん (必ずしもそうとは限りませんが) 将来的に拡張したいと思います (例: public class myClassB extends myClass)。このキーワードはそれを防ぎます。

4

5 に答える 5

3

コンストラクターを除外する以外に何か他のことをする必要がありますか?

はい。コンストラクターを自分で作成しない場合は、Java がコンストラクターを提供します。

独自のプライベートコンストラクターを作成する必要があります。

public final class MyClass {
    // Prevent the compiler from supplying a constructor automatically.
    private MyClass() {}

    public static int doubleMe(int x){
        return 2*x;
    }
}

(通常の Java 命名規則に従うようにクラスの名前を修正しました。)

のソース コードを見るとjava.lang.Math、同じ理由でそこにプライベート コンストラクターがあることがわかります。

しかし、クラスを最終的なものにするかどうかはわかりません。たぶん (必ずしもそうではありませんが) 将来的に拡張したいと思います (例: public class myClassB extends myClass)。このキーワードはそれを防ぎます。

ポリモーフィズムの理由でのみクラスを拡張する必要があります。これは、インスタンス化できないクラスには関係ありません。

于 2013-04-03T19:35:08.840 に答える
0

コンストラクターを 1 つ (実際には好きなだけ) 使用し、そこから未チェックの例外をスローします。

そのようなクラスのインスタンスを作成できる人はいません。

ただし、クラスの静的メソッド/フィールドを使用できます。

このアプローチは野蛮に聞こえますが、正式には機能します。

于 2013-04-03T19:47:13.843 に答える