मैं अपने डेटाबेस में जानने के लिए अपने खुद के भंडार बनाने के लिए कोशिश कर रहा हूँ, इसलिए मैं कुछ इस तरह कोशिश कर रहा हूँ:सामान्य प्रकार के कॉलिंग कन्स्ट्रक्टर?
@Override
public <T extends DatabaseObject> List<T> getList() {
Cursor cursor = getCursor(somehowGetClassOfT(), null, null); //how to do this?
//excess code removed, rest of function not relevant to question
return list;
}
protected <T extends DatabaseObject> Cursor getCursor(Class<T> clazz, String selection, String[] selectionArgs) {
DatabaseObject databaseObject = instantiateFromT(clazz); //how to do this?
String tableName = databaseObject.getTableName();
String[] projection = databaseObject.getProjection();
String sortOrder = databaseObject.getDefaultOrderColumn() + " " + DEFAULT_SORT_ORDER;
Cursor cursor = database.query(
tableName,
projection,
selection,
selectionArgs,
null,
null,
sortOrder
);
return cursor;
}
दूसरे शब्दों में मैं कई कक्षाओं कि DatabaseObject का विस्तार है, और मुझे निर्माण करने में सक्षम होना चाहता हूँ उनके लिए गतिशील रूप से एक कर्सर।
मैंने डेटाबेस ऑब्जेक्ट में मूल विधियों को परिभाषित किया है जैसे तालिका का नाम, कॉलम नामों की स्ट्रिंग सरणी आदि प्राप्त करना, लेकिन चूंकि मैं इंटरफ़ेस (तालिका नाम जैसी चीज़ों के लिए) के माध्यम से स्थिर तरीकों को ओवरराइड नहीं कर सकता, मुझे तुरंत चालू करना होगा खाली वस्तु इसलिए मैं एक गेटर के साथ टेबल नाम प्राप्त कर सकते हैं।
हालांकि, मुझे यकीन है कि कैसे लागू करने के लिए नहीं कर रहा हूँ:
somehowGetClassOfT()
। जो भीT
है, मैं कर्सर फ़ंक्शन में कक्षा को पास करना चाहता हूं।instantiateFromT(clazz)
। कुछ वर्ग को देखते हुए, कन्स्ट्रक्टर को कॉल करें ताकि मैं उस ऑब्जेक्ट की तालिका/प्रोजेक्शन/सॉर्ट फ़ील्ड तक पहुंच प्राप्त कर सकूं।
या यह सब "प्रतिबिंब" का उपयोग कर संभव है जो मैं सुन रहा हूं?
एक सीधे तरीके से। मैंने जवाब दिया। – davidxxx
मैंने अभी देखा है। एसओ द्वारा पहले से ही मदद की है। ग्रेट :) – davidxxx
लाइन 'डॉग रिपोजिटरी (कक्षा प्रकार)', क्या कक्षा में तर्क के रूप में पास करना आवश्यक है? अर्थात। क्या DogRepository के पास किसी भी तरह से एक तर्क नहीं पारित करने के लिए Dog.class को आंतरिक संदर्भ होना चाहिए ताकि भंडार को हर बार बाहर से बाहर नहीं किया जाना चाहिए? –
user7085962