私がこれを持っているとしましょう:
Object obj = new Double(3.14);
に明示的にキャストせずに、のobjように使用する方法はありますか? たとえば、for の計算方法を使用したいとします。DoubleDouble.doubleValue()Double
いいえ、これを行う方法はありません。objは(インスタンスObjectであっても) タイプであり、クラスには などのメソッドがありません。適切な方法は実際にキャストすることです:Double ObjectdoubleValue()
Double d = (Double) obj;
キャストできない場合に行う唯一の方法は、リフレクションを使用することです。
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
これは通常、一部の限られたコーナー ケースでのみ役立ちます。通常、キャスト、ジェネリック、または何らかのスーパータイプの使用が適切なアプローチです。
それはいけません。
への参照であるため、自由にObject使用できるメソッドのみが表示されます。Object
Number、 などのスーパークラスでありInteger、Shortを定義するを使用できることに注意してください.doubleValue()。
final Number n = new Double(2.0);
n.doubleValue(); // works
あなたができる最も近いのはこれです
Number num = new Double(3.14);
double d= num.doubleValue();
オブジェクトの実行時の型に基づいてではなく、コンパイラが使用できることを認識しているメソッドのみを呼び出すことができます。
つまりObject、 doubleValue() メソッドがないため、呼び出すことはできません。呼び出したいメソッドを持つ参照型が必要です。
いいえ、できません。インスタンスobjは への参照であり、クラスObjectのメソッドのみを見ることができます。クラスの特定のメソッドを使用するには、Objectキャストする必要があります。DoubleDouble
いいえ!唯一の代替手段は、次を使用することです。
obj.toString()
または、double として使用するには:
Double.parseDouble(obj.toString())
しかし、それは良い習慣ではありません。確かに、あなたのケースに代わる別の良い選択肢があります。コードを投稿する