私はジェネリックに新しいです入力すると、この回答を見ていた:それは完璧に動作キャストは、java
https://stackoverflow.com/a/17165079/1632141
、しかし私は、コードのこの部分がどのように動作するか理解できませんでした。
public T calories(int val) {
calories = val;
return (T) this;
}
NutritionFacts
の内部クラスです。
ここでキャストはどのように機能しますか?純粋なスーパークラスオブジェクトをサブクラス化してキャストしているので、ここではjava.lang.ClassCastException
が必要です。
"純粋なスーパークラスオブジェクト"とはどういう意味ですか?とにかく 'this'は常に' T'型になります。 –
コードは 'public static class(GMOFacts。)のコンテキストで実行されます。BuilderはNutritionFacts.Builder <(GMOFacts。Builder)を拡張します。 「T」はそれを法的なキャストにするビルダー自身のタイプです。また、コードがスーパークラスで宣言されていても、 'this'はスーパークラス型ではありません。 'this'は常に具体的なランタイム(サブクラス)型です。 – zapl
@LouisWasserman:そうではありません。 'this'は' T'型ではない可能性があります。 – newacct