1

任意のタイプの引数を渡すことができるメソッドがあります。私の目的は、渡された引数が数値であるかどうかを確認し、数値の絶対値を見つけることです。渡されるオブジェクトは、double、Integer、string、long などです。

デモ.java

public class Demo{
public Object abs(Object O){
       if(Number.class.isAssignableFrom(O.getClass())){

    // Check the type of the number and return the absolute value of the number

        }
       else
       {
             return -1
       }
  }
4

4 に答える 4

2

オブジェクトの正確なタイプを見つけたい場合は、次if-then-elseのように一連の sを使用できます。

Class<? extends Object> cls = O.getClass();
if (cls == Integer.class) {
} else if (cls == String.class) {
} else if (cls == Long.class) {
} else if (cls == Double.class) {
} ...

Objectただし、これは設計上の選択として不適切なように思えます。そもそもこの問題を回避するために必要な「すべてをキャッチ」するメソッドの代わりに、オーバーロードされたメソッドを使用することを検討してください。

public Double abs(Double O){
   ...
}
public String abs(String O){
   ...
}
public Long abs(Long O){
   ...
}
public Integer abs(Integer O){
   ...
}
于 2013-04-12T16:14:56.937 に答える
0

instanceof代わりに演算子を使用してみてください。

if ( O instanceof Number ) {
  return Math.abs(((Number)O).doubleValue());
}

要件が拡大しています - にキャストしてもdoubleよろしいですか?

instanceof と Class.isAssignableFrom(...) の違いは何ですか? を参照してください。詳細については。

于 2013-04-12T16:13:02.347 に答える