2013-05-27 14 views
5

を検出し、指定されたクラスは、そのボックスプリミティブ型または私はこのような醜い方法をしなければならないクラスであるかどうかを知る方法があります:はボクシングのクラス

public boolean isBoxingClass(Class clazz){ 
    String simpleName=clazz.getSimpleName(); 
    switch(simpleName){ 
    case "Integer": 
    case "Long": 
    case "Boolean": 
    case "Double": 
    case "Float": 
     return true; 
    default : 
     return false; 
    } 
} 

EDIT:

は、最後に、このソリューションを選択した場合:

public static final List<Class> BOXING_CLASSES= Arrays.asList(new Class[]{ 
     Integer.class, 
     Long.class, 
     Short.class, 
     Boolean.class, 
     Double.class, 
     Float.class, 
     Character.class, 
     Void.class, 
     Byte.class}); 

public static boolean isBoxing(Class clazz){ 
    return BOXING_CLASSES.contains(clazz); 
} 
+1

どうCharacter' 'は? my.package.Integer' 'は' true'をを返します –

+6

!このようにする方が良いです。 'class == Integer.class ||クラス== Long.class || ... '(設定または同等の、' > '便利になるでしょう)。 –

+1

@Ziyao Wei:このようなケースを逃したくないので正確にメソッドが必要です。) –

答えて

-1

どのクラスが番号を実装し、またはそれは文字だ、またはブールあれば(私はそれらが唯一の選択肢だと思う)場合は探してはどうですか?

public boolean isBoxingClass(Class clazz) 
{ 
    return Number.class.isAssignableFrom(clazz) || 
      Character.class.isAssignableFrom(clazz) || 
      Boolean.class.isAssignableFrom(clazz); 
} 

この場合、たとえばtrueになります。 BigDecimalとAtomicIntegerも、あなたが望むものかどうかは分かりません。しかし、どんな場合でも、getSimpleName()を実行する必要はありません。

+0

'BigDecimal.class'に対して' true'を返します。 –

2

これは私が考える可能性が最も簡単な方法です。ラッパークラスはjava.langパッケージ内に存在しています。そして離れラッパークラスから、java.lang内の他のクラスはTYPEという名前の変数を持っていません。クラスを使ってクラスがWrapperクラスかどうかを調べることができます。

public static boolean isBoxingClass(Class<?> clazz) 
{ 
    String pack = clazz.getPackage().getName(); 
    if(!"java.lang".equals(pack)) 
     return false; 
    try 
    { 
     clazz.getField("TYPE"); 
    } 
    catch (NoSuchFieldException e) 
    { 
     return false; 
    }   
    return true;   
} 
関連する問題