2016-08-23 43 views
0

ほとんどの場合、私はこの些細な使用例で何かを監督します。 私のコードは、クラス内の注釈付きフィールドを反復処理し、すべてのフィールドに対して、型に応じていくつかのコードを実行したいと考えています。例えば、予想通りjava.lang.reflect.Field getType()結果はequals()を使用する型と比較できません

if (type.equals(Boolean.class)) 

dosn't仕事:

field.setAccessible(true); 
final Class<?> type = field.getType(); 
if (type.equals(Boolean.class)) { 
    field.set(this, Boolean.parseBoolean(property)); 
} else if (type.equals(Integer.class)) { 
    field.set(this, Integer.parseInt(property)); 
} else if (type.equals(String.class)) { 
    field.set(this, property); 
} else { 
    LOGGER.warn("Cannot parse property -{}{}. Unknown type defined.", option.getOpt(), 
      field.getName()); 
} 

しかし、このチェック:最も単純には値を設定するだけですprivate boolean isVerbose;と定義されているフィールドの場合。 typeの検査の後、私はプロパティnameをただ"boolean"としました。ここでBoolean.classのプロパティname"java.lang.Boolean"で埋められました。これらの対象は異なっていた。

このシナリオを正しく実装するにはどうすればよいですか? Javaでは

答えて

0

booleanBooleanは、二つの異なるタイプである:Booleanjava.lang.Boolean内のクラスであるbooleanは、基本データ型です。この例では、あなたのクラスでは、タイプjava.lang.Booleanではないprivate boolean isVerboseを使用しています。したがって、それをprivate Boolean isVerboseに変更する必要があります。 これが役立つことを願っています!!!!!!

0

この記事を見てみましょう:私はあなたがJavaのプリミティブとボクシングとのトラブルを抱えていると信じてCheck type of primitive field

は基本的にあなたが個別にプリミティブ型をチェックする必要があります(Boolean.TYPELong.TYPEなど)

if (field.getType().equals(Boolean.TYPE) { 
    // do something if field is boolean 
} 
0

を。 java.lang.Booleanはクラスであり、 "ブール値"は単にプリミティブ型を表します。

private boolean myBool; // this a java primitive 
private Boolean myOtherBool; // this is an object 

Javaは必要に応じて自動的にこれらの型の間の変換ができますが、タイプを検査しているとして自分自身が、あなたがこれに注意を払う必要があります:

は、それはあなたが宣言天気を差です。

同じことのために行く: - 整数 - ロング - ショート - バイト

私は私が何かを忘れていない願っています。

関連する問題