개체의 필드에 추가해야하는 XML 데이터가 있습니다 (모든 문자열 임). 객체에는 XML 데이터에 해당하는 필드와 메서드가 있습니다. 예를 들어 XML의 <RmkSk>123</RmkSk>
은 setRmkSk(String)
과 일치합니다. 그러나 때때로 int, long 또는 double과 같은 다른 유형을 예상하는 필드가 있습니다. 예를 들어 <Capacity>456</Capacity>
은 setCapacity(double)
과 일치합니다. 리플렉션을 사용하여 매개 변수 유형을 확인할 수 있지만 문자열을 적절한 데이터 유형으로 안정적으로 변환하는 방법을 모르겠습니다. 예를 들어문자열이있을 때 알려지지 않은 프리미티브를 예상하는 메서드를 어떻게 호출합니까?
for(Method m: o.getClass().getDeclaredMethods()) {
if(!m.getName().startsWith("set")) continue;
System.out.println(m.getName());
for(Class c: m.getParameterTypes()) {
System.out.println(" " + c.getName());
}
}
표시 :
setEqpSk
java.lang.String
setCapacity
double
이 java.lang.Double
있다면 그것은 쉽게 (상대적으로) Double.valueof
전화를 다시 반사를 사용하는 것입니다하지만 기본 유형이 아닌 개체 유형입니다. 첫 번째 문자를 대문자로 바꾸고 이것을 "java.lang."
과 연결하는 것 이외의 다른 방법을 사용할 수있는 확실한 방법이 있습니까? 내가 잘못된 방향으로가는거야?
누군가가 외부의 도서관을 제안하기 전에, 나는 그들에 대해 듣는 것에 대해 개방적이지만, 이것은 제한된 정부 시스템에 있으며 승인 된 것과 같은 것을 얻는 것이 항상 쉬운 것은 아닙니다.
편집 : 명확히하기 위해, 나는 다음과 같은 피하려고 노력 해요 :
if (types[0] == String.class) {
m.invoke(o, value);
} else if (types[0] == double.class || types[0] == Double.class) {
m.invoke(o, Double.parseDouble(value));
} else if (types[0] == int.class || types[0] == Integer.class) {
m.invoke(o, Integer.parseInt(value));
} else if (types[0] == //add checks for EVERY primitive type
등 등
XML 데이터를 수정할 수 있습니까? 가능한 경우 예상되는 데이터 형식을 추가 할 수 있습니다. 그렇지 않으면 두 번 데이터를 설정해야하는데, 처음에는'Double'을 사용하고 그 다음에'double'을 사용합니다 ... – MadProgrammer
그것은 현재 문자열 "456"입니다. 나는 다른 사람이 제공 한 XML 데이터를 검색하고있다. – Derek
매개 변수 유형이'double'이라면 프리미티브를 다루고 있고 그에 따라 변환 할 수 있어야한다는 것을 알아야한다. 만약 java.lang.Double이라면 새로운'Double' 객체를 생성해야한다. – MadProgrammer