0

抽象クラスは次のように宣言されます。

 myClass<E extends Number, D extends Number>

サブクラスは

 final mySubClass<Double,Integer>
 final myOtherSubclass<Double,Double>

最初の型のパラメーター化されたプロシージャを持たないサブクラスがあると想像してください。つまり、型は無視されます。Void、Nullなどに設定する方法はありますか?

final mySubClassThatDontUseFirstType<Void,Integer>

たとえば、内部に List<E> がある場合、このリストは決して使用されないため、List になります。

4

2 に答える 2

1

問題は、VoidがObjectを拡張しないことだと思います。そうでない場合は、機能すると思うからです。

もちろん、他のJavaクラスが拡張するのと同じように、クラスは拡張しjava.lang.Voidます。ObjectObject

Voidと同じではないことに注意してくださいvoidVoid大文字の場合は、プリミティブ型( -> 、->など)Vのラッパークラスに少し似ています。intIntegerlongLong

Voidコンパイラは他のクラスと同じように扱うことに注意してください。つまり、を返すメソッドがある場合はVoid、値を返す必要があります。たとえば、メソッドはどこかで終了する必要がありreturn null;ます。voidこれは、コンパイラが「何も返されない」と理解するようなものではありません。

于 2012-07-24T11:54:36.410 に答える
1

Void、Nullなどに設定する方法はありますか?

いいえ、そうではありません。選択するものはすべて、のサブタイプである必要がありますNumber(これは単にJava言語の要件です)。

あなたにできることは、インスタンス化できないクラスを作成することですVoidNumber

class VoidNumber extends Number {

    // Private constructor
    private VoidNumber() {
    }

    ...
}

それを使用して、使用されていないという事実を文書化します。

于 2012-07-24T11:55:01.187 に答える