2017-06-30 24 views
0

私は、オブジェクトのすべての単一メンバーでJobParametersオブジェクトを生成するメソッドを作成しようとしています。これは私が今までに得たものです:任意のオブジェクトに対してJobParameterBuilderを作成する方法は?

public static JobParameters getAttributesAsJobParameters(Object objectToConvert) throws IllegalAccessException { 
    JobParametersBuilder jobParametersBuilder = new JobParametersBuilder(); 

    for (Field field : objectToConvert.getClass().getDeclaredFields()) { 
     field.setAccessible(true); 
     jobParametersBuilder.addLong(field.getName(), (Long) field.get(objectToConvert)); 
    } 

    return jobParametersBuilder.toJobParameters(); 
} 

しかし、これはオブジェクトにLongと異なるメンバーがない場合にのみ機能します。どのように私はすべての原始的な型で動作するようにこれを生成できますか?

答えて

0

感謝し、私はより多くの「複雑な」オブジェクトを操作できるソリューションを取得Ericによって与えられた先端に:

public static JobParametersBuilder getAttributesAsJobParameters(Object objectToConvert) throws IllegalAccessException { 
    JobParametersBuilder jobParametersBuilder = new JobParametersBuilder().addLong("time", System.currentTimeMillis()); 

    for (Field field : objectToConvert.getClass().getDeclaredFields()) { 
     field.setAccessible(true); // We need this to access to attributes if they are private 
     if (!field.getType().isPrimitive()) { 
      jobParametersBuilder = getAttributesAsJobParameters(field.get(objectToConvert)); 
     } else { 
      matchJobParametersType(jobParametersBuilder, field, objectToConvert); 
     } 
    } 
    return jobParametersBuilder; 
} 

public static void matchJobParametersType(JobParametersBuilder jobParametersBuilder, Field fieldOfObject, Object object) throws IllegalAccessException { 
    String dataTypeOfField = fieldOfObject.getType().getSimpleName(); 

    switch (dataTypeOfField) { 
     case "long": 
      jobParametersBuilder.addLong(fieldOfObject.getName(), (Long) fieldOfObject.get(object)); 
      break; 
     case "String": 
      jobParametersBuilder.addString(fieldOfObject.getName(), (String) fieldOfObject.get(object)); 
      break; 
     default: 
      throw new JobParametersException("Data type " + dataTypeOfField + " not defined"); 
    } 

} 
関連する問題