2017-02-25 5 views
3
public class Box { 
    private Object object; 

    public void set(Object object) { this.object = object; } 
    public Object get() { return object; } 
} 

公式のJavaチュートリアルのドキュメントと上記のスニペットからこのテキストを参照して、ランタイムエラーを再現しようとしました。ランタイムエラーが発生していないので、私のコードで何が問題になっていますか?Javaチュートリアルのドキュメントに記載されているように、このスニペットで実行時エラーが発生しないのはなぜですか?

このメソッドはObjectを受け入れるか返すので、プリミティブ型のいずれでもない場合は、任意のものを自由に渡すことができます。クラスの使用方法をコンパイル時に検証する方法はありません。コードの一部がIntegerをボックス内に配置し、整数を取得することが予想されますが、コードの別の部分が誤ってStringを渡して実行時エラーが発生する可能性があります。

私が書いたコード。

public class Box { 
    private Object obj; 

    public void set(Object obj) { 
     this.obj = obj; 
    } 
    public Object get() { 
     return obj; 
    } 

    public static void main(String [] args) { 
     Box g = new Box(); 
     System.out.println(g.get()); 
     g.set("hello again"); 
     System.out.println(g.get()); 
    } 
} 

答えて

4
public static void main(String[] args) { 
    Box g = new Box(); 

    g.set("hello again"); 
    Integer i = (Integer) g.get(); 

    System.out.println(i + 1); 
} 

このコードはStringに通過するが、Integerを取得しよう。コンパイラは、これが失敗することを検出できません。実行時にはClassCastExceptionがスローされます。

0

すべての文字列がオブジェクトなので、実行時エラーは発生しません。

getによって取得されたオブジェクトを異なるタイプの他のオブジェクトに割り当てるときにエラーが表示されます。 EX用

g.set("hello again"); 
Integer i = (Integer) g.get(); // getting string and trying to cast it to integer. 
3

あなたが例を誤解されています。 Stringを渡すとエラーになることはありません。 Stringを渡すと、プログラムの別の部分がIntegerになるとエラーになることがあります。例えば

public static void main(String [] args) { 
    Box g = new Box(); 
    g.set("hello again"); 
    Integer error = (Integer) g.get(); 
} 

はエラーになります。

関連する問題