1

私がこれを持っているとしましょう:

Object obj = new Double(3.14);

に明示的にキャストせずに、のobjように使用する方法はありますか? たとえば、for の計算方法を使用したいとします。DoubleDouble.doubleValue()Double

4

6 に答える 6

5

いいえ、これを行う方法はありません。objは(インスタンスObjectであっても) タイプであり、クラスには などのメソッドがありません。適切な方法は実際にキャストすることです:Double ObjectdoubleValue()

Double d = (Double) obj;
于 2013-06-12T14:52:01.923 に答える
3

キャストできない場合に行う唯一の方法は、リフレクションを使用することです。

Object obj = new Double(3.14);

Method m1 = obj.getClass().getMethod("doubleValue");
System.out.println("Double value: " + m1.invoke(obj));

Method m2 = obj.getClass().getMethod("intValue");
System.out.println("Int value: " + m2.invoke(obj));
Double value: 3.14
Int value: 3

これは通常、一部の限られたコーナー ケースでのみ役立ちます。通常、キャスト、ジェネリック、または何らかのスーパータイプの使用が適切なアプローチです。

于 2013-06-12T14:59:17.453 に答える
2

それはいけません。

への参照であるため、自由にObject使用できるメソッドのみが表示されます。Object

Number、 などのスーパークラスでありIntegerShortを定義するを使用できることに注意してください.doubleValue()

final Number n = new Double(2.0);
n.doubleValue(); // works
于 2013-06-12T14:52:04.680 に答える
2

あなたができる最も近いのはこれです

Number num = new Double(3.14);
double d= num.doubleValue();

オブジェクトの実行時の型に基づいてではなく、コンパイラが使用できることを認識しているメソッドのみを呼び出すことができます。

つまりObject、 doubleValue() メソッドがないため、呼び出すことはできません。呼び出したいメソッドを持つ参照型が必要です。

于 2013-06-12T14:52:49.443 に答える
1

いいえ、できません。インスタンスobjは への参照であり、クラスObjectのメソッドのみを見ることができます。クラスの特定のメソッドを使用するには、Objectキャストする必要があります。DoubleDouble

于 2013-06-12T14:52:03.520 に答える
0

いいえ!唯一の代替手段は、次を使用することです。

obj.toString()

または、double として使用するには:

Double.parseDouble(obj.toString())

しかし、それは良い習慣ではありません。確かに、あなたのケースに代わる別の良い選択肢があります。コードを投稿する

于 2013-06-12T14:52:45.630 に答える