मैं जावाजावा एनोटेशन
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {
String columnName();
}
और कक्षा में सरल एनोटेशन बना लिया है
public class Table {
@Column(columnName = "id")
private int colId;
@Column(columnName = "name")
private String colName;
private int noAnnotationHere;
public Table(int colId, String colName, int noAnnotationHere) {
this.colId = colId;
this.colName = colName;
this.noAnnotationHere = noAnnotationHere;
}
}
मुझे लगता है कि Column
से एनोटेट सभी क्षेत्रों, से अधिक पुनरावृति और नाम और मूल्य प्राप्त करने की आवश्यकता क्षेत्र और एनोटेशन के। लेकिन मुझे प्रत्येक क्षेत्र के मूल्य प्राप्त करने में समस्या है, क्योंकि उनमें से सभी अलग-अलग डेटा प्रकार हैं।
क्या ऐसा कुछ भी है जो फ़ील्ड का संग्रह वापस करेगा जो एनोटेशन है? मैं इसे इस कोड के साथ करने में कामयाब रहा, लेकिन मुझे नहीं लगता कि प्रतिबिंब इसे हल करने का एक अच्छा तरीका है।
Table table = new Table(1, "test", 2);
for (Field field : table.getClass().getDeclaredFields()) {
Column col;
// check if field has annotation
if ((col = field.getAnnotation(Column.class)) != null) {
String log = "colname: " + col.columnName() + "\n";
log += "field name: " + field.getName() + "\n\n";
// here i don't know how to get value of field, since all get methods
// are type specific
System.out.println(log);
}
}
मैं वस्तु में हर क्षेत्र है, जो getValue()
की तरह विधि लागू करेगा रैप करने के लिए है, या वहाँ इस के आसपास कुछ बेहतर तरीका है? मूल रूप से मुझे केवल प्रत्येक फ़ील्ड की स्ट्रिंग प्रस्तुति की आवश्यकता है जो एनोटेटेड है।
संपादित करें: yep field.get(table)
काम करता है, लेकिन केवल public
फ़ील्ड के लिए, क्या private
फ़ील्ड के लिए भी ऐसा करने का कोई तरीका है? या मुझे गेटटर बनाना है और किसी भी तरह इसे आमंत्रित करना है?
सेट अक्षम। यदि आपके पास सुरक्षा प्रबंधक मौजूद है तो सरणी संस्करण तेज़ होगा। सेट असफल, निश्चित रूप से, परिस्थितियों में बहुत खतरनाक है जहां आपके पास सुरक्षा प्रबंधक है। –
डरावना ...ऐसा लगता है कि आप जेपीए – basszero
@basszero के अपने संस्करण को कार्यान्वित कर रहे हैं: हाँ, आप सही हैं, मुझे अपने कॉलेज प्रोजेक्ट के लिए यह करना है क्योंकि मेरे बेवकूफ शिक्षक जो गुफा में रहते हैं और किसी भी पुस्तकालय का उपयोग करने की अनुमति नहीं देते हैं जैसे कि टॉपलिंक इत्यादि ... –