2016-04-13 8 views
1

この質問はこの概念を理解するためのものです。 nullはどのようにして(Throwable)にキャストできますか? nullはクラスの権利ではありませんか?この質問は愚かであると思われる。nullをThrowable super((Throwable)null)にキャストする方法。

私がことを知っている:すべての結果は再びnullの後に注意すべき重要なポイントは、あなたが任意の参照型へnullをキャストすることができている

public class SuperClass{ 
    int id = 0; 
    public SuperClass(int id){ 
     this.id = id; 
    } 
} 

public class SubClass extends SuperClass{ 
    public SubClass(int id) { 
     super(id); 
    }  
} 

public class Tester{ 
    SubClass sub = new SubClass(1); 
    SuperClass s = new SuperClass(2); 
    SuperClass s1 = new SubClass(3); 

    public Tester(){ 
     if(s1 instanceof SubClass){ 
      //true 
      SubClass subClass = (SubClass) s1; 
     } 
    }  
}` 
+0

'Throwable'が' null'にキャストされるコードを提供してください。これらは必要な場合もありますが、コードなしで説明するのは難しいです – ortis

+0

あなたのコードはどのように質問に関係していますか? –

答えて

1

任意のクラスのインスタンスに匹敵するかも? nullはクラスの権利ではありませんか?

nullにはタイプがありません。 nullは、任意のクラスまたはインターフェイスタイプにキャストできます。それは霊長類にキャストすることはできません。

Throwableは、java.langのパッケージ内のクラスです。

クラスはキャストできません。参照のみをキャストできます。

String s = "Hello"; 

ここ変数s参照ないクラスまたはオブジェクト、またさえStringあります。

Throwable t = new Throwable(); 

ここ変数tThrowableへの参照であるが、それはnullに設定することができます。

Throwable t = null; // the reference doesn't point to any object. 
+0

ああ、ありがとう、それは良い説明だった! – theo231022

1

1

nullは型ではありません。概念的に(のThrowable)にキャストすることができヌルどう

String s = (String)null; 
Integer i = (Integer)null; 
+0

今、私には意味がありますが、例外が発生した後、システムのクラスのどこかでこれを見ました。 – theo231022

0

他にも書かれているように、すべてにnullをキャストできます。

通常、あなたが書くことができる、という必要はありません。

String nullString = null; 

がキャストをかけることなく。

なキャストが意味をなす唯一の場所は以下のとおりです。

あなたのような、特定のメソッドが呼び出されることを確認する場合はA):

void foo(String bar) { ... } 
void foo(Object bar) { ... } 

あなたならば、それが違いを生むだろうタイプ

foo((String) null) vs. foo(null) 

b)コードを生成するためにIDEを使用する予定の場合。例えば、私は通常以下のようなユニットテストを書いています:

@Test(expected=NullPointerException.class) 
public testCtorWithNullWhatever() { 
    new MyClassUnderTest((Whatever) null); 
} 

私はTDDをやっています。これは、クラス "MyClassUnderTest"がおそらくまだ存在しないことを意味します。そのコードを書き留めることで、IDEを使用して最初に新しいクラスを生成することができます。そして "Whatever"引数を受け入れるコンストラクタを生成します。

関連する問題