Đây là một chút bất tiện khi thực hiện trong một bước.
Khi chúng ta chuyển sang khái niệm đa hình, có nhiều thách thức như tạo ra các đối tượng cho lớp (ABC Class) lấy dữ liệu động bằng cách tham chiếu các lớp chuyên dụng khác (lớp ABCXMLDOMnodes, lớp ABCHTMLDOMnodes) có cùng trường nhưng kiểu tĩnh và cuối cùng. Hy vọng bạn đã nhận được yêu cầu.
1.Tạo ArrayDanh sách các trường Tên đơn giản của ba lớp này là toàn cục.
private static ArrayList<String> getAllFieldsSimpleNames(Class<?> beanClass) {
ArrayList<String> fieldNames = new ArrayList<String>();
Field[] fields = beanClass.getDeclaredFields();
for (Field field : fields) {
fieldNames.add(field.getName());
}
return fieldNames;
}
2.Và sau đó mỗi khi tạo ra một đối tượng chúng ta đang xác nhận lĩnh vực (nói> 10 lĩnh vực) chống lại các lớp helper như dưới đây rất dễ dàng tôi cảm thấy.
for(String a :abcFieldNames){
if(abcXMLfieldnames.contains(a)){
//code here
}else if(abcHTMLfieldnames.contains(a){
//code here
}
}
đơn giản khác và cách động lực được tạo
HashMap<Class<?>, ArrayList<String>> = ...
hm.put(ABC.class, getAllFieldsSimpleNames(ABC.class));
hm.put(ABCXMLDOMnodes.class, getAllFieldsSimpleNames(ABCXMLDOMnodes.class));
if(hm.get(ABCXMLDOMnodes.class).contains("a"){...}
Đề nghị của tôi để Oracle CorpMạng JAVA là nếu "Class class" có thể cung cấp một phương thức trả về một danh sách các tên trường của Class đã cho dưới dạng kiểu chuỗi chỉ có ích.
Hoặc một ngoại lệ bảo mật nếu nó không thể truy cập được (ví dụ: 'riêng tư') – CrackerJack9
Hoàn hảo, cảm ơn bạn! – emachine
@ CrackerJack9 không, truy cập các trường riêng với 'getField()' không ném một 'SecurityException'. – Bombe