generics를 사용하여 Java에서 클래스 인스턴스를 어떻게 인스턴스화 할 수 있습니까?제네릭으로 java 클래스 인스턴스를 어떻게 인스턴스화 할 수 있습니까?
XML 파일에서 데이터를 읽은 다음 개체를 인스턴스화하여 개체의 다른 속성 (XML 파일에서 읽음)을 개체에 추가하려고합니다. 나는 (클래스 메소드 이름을 읽고 setter를 찾을 필요가 없도록) 생성자의 모든 값을 가진 객체를 인스턴스화하는 것이 가장 쉬운 방법이라고 생각했다. T obj = new Object()
하지만 객체 클래스에게 조언을
private static final boolean string_field = true;
private static <T> T getObject(Element e, String[] fieldNames, boolean[] fieldTypes) {
Object[] values = new Object[fieldNames.length];
for (int i=0; i<fieldNames.length; i++) {
values[i] = (fieldTypes[i]==string_field)? getStringValue(e, fieldNames[i])
: getIntegerValue(e, fieldNames[i]);
}
return new T(values);
}
감사를 얻을 : 나는 이런 식으로 뭔가를 할 노력하고있어
그래서 내가 좋아하는 뭔가를해야합니다.
는 편집 :
이 내 업데이트 된 코드 (테스트되지 않은)입니다 : 여러분 중 몇몇은 내가 할 노력하고있어 이해할 수 있도록
public static <T> List<T> populateObjectList(Document xmlDoc, String tagName,
Class clazz, String[] fieldNames, Class[] fieldTypes) {
List<T> objList = new ArrayList<T>();
NodeList nl = xmlDoc.getElementsByTagName(tagName);
if (nl!=null && nl.getLength()>0) {
for (int i=0; i<nl.getLength(); i++) {
Element e = (Element) nl.item(i);
T t;
try {
t = getObject(e, clazz, fieldNames, fieldTypes);
objList.add(t);
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (IllegalArgumentException ex) {
} catch (InvocationTargetException ex) {
} catch (NoSuchMethodException ex) {
}
}
}
return objList;
}
private static <T> T getObject(Element e, Class clazz, String[] fieldNames, Class[] fieldTypes)
throws InstantiationException, IllegalAccessException, IllegalArgumentException,
InvocationTargetException, NoSuchMethodException {
Object[] initargs = new Object[fieldNames.length];
for (int i=0; i<fieldNames.length; i++) {
initargs[i] = (fieldTypes[i].getName().equals("int"))?
getIntegerValue(e, fieldNames[i])
: getStringValue(e, fieldNames[i]);
}
return (T) clazz.getConstructor(fieldTypes).newInstance(initargs);
}
나는 이것을 기록했다.
모두에게 감사드립니다.
소거에 문제가있을 수 있습니다 ...? – Steven
이 코드가 잘못되었다는 것을 알고 있습니다. 나는 그것을 달성하기 위해 무엇을 설명하는지 설명했습니다. 값 배열에 매개 변수 값이있는 T 유형의 객체를 인스턴스화하려고합니다. – Ozzy
@ user1031312 : 'T'가 어떤 유형인지 알고 계십니까? 어떻게 든 '요소'에 따라 결정됩니까? 그렇다면 클래스에 요소 이름을 매핑하는'Map>'이 당신이 원하는 것이다. Taymon의 대답에 따라 객체를 만들 수 있습니다. 또는, 아마도'getObject()'메소드는'Class '을 인수로 취해야한다. –