なぜ渡すプリミティブ型は私にエラーを与えていないですか?

D DUI:

私はからのJavaのマニュアルを読んでいたhttps://docs.oracle.com/javase/tutorial/java/generics/私はこの段落に出くわしたとき: -

シンプルなボックスクラスは、任意のタイプのオブジェクトで動作する非ジェネリックBoxクラスを調べることから始めます。それを取得した、セットボックスにオブジェクトを追加した、と取得:それは唯一の2つのメソッドを提供する必要があります:

public class Box {
    private Object object;

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

そのメソッドが受け入れるか、またはオブジェクトを返すので、あなたはそれがプリミティブ型の一つではないことを提供し、あなたが好きに合格するのは自由です。クラスがどのように使われるか、コンパイル時、で、検証する方法はありません。コードの別の部分が誤って実行時エラーが生じ、文字列を渡すかもしれないが、コードの一部は、ボックス内の整数を置き、そこから整数を得ることを期待します。

私は、次のコードを実行しました

public class Box {
private Object object;

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

。..

public class test {
 public static void main(String[] args) {
    Box box = new Box();
    String s = "hello";
    box.set(s);
    System.out.print(box.get());
    Box box2 = new Box();
    int i = 5;
    box2.set(i);
    System.out.print(box2.get());
    }
}

しかし、それはすべてのランタイムエラーを与えていません。

これは、オートボクシングが原因か?それがそうであるならば、そこジェネリック医薬品を使用することの少ない重要です??

ありがとうございました

スイーパー:

オートボクシングはここに確かにあります。

int i = 5;
box2.set(i);

set期待しObjectて、あなたはそれ与えているint、それが箱入りますので、Integer

しかし、それはあなたがエラーを取得していない理由ではありません。

あなたが引用された段落は、と言っています

コードの別の部分が誤って実行時エラーが生じ、文字列を渡すかもしれないが、コードの一部は、ボックス内の整数を置き、そこから整数を得ることを期待します。

その段落は話している同じボックス!あなたは、2つの異なる箱を作成して入れているInteger1内およびStringその他に。

その段落が言っていることを再作成するには、あなたはこのような何かを行うことができます。

// there is only one box
Box box = new Box();

// one part of your code
box.set(10);

// another part of your code (Imagine box is passed to some other class and you forgot that it actually has an Integer)
String myString = (String)box.get(); // error!

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=118633&siteId=1