मेरे पास वर्तमान में निम्न कोड है जो डेटाबेस से डेटा पुनर्प्राप्त करता है और फिर User
बनाता है। News
, Comments
आदि जैसे अन्य ऑब्जेक्ट्स बनाने के लिए इस कोड का उपयोग मेरे कई क्लैस में किया जाता है ...जावा जेनेरिक कन्स्ट्रक्टर
यह अपाचे कॉमन्स dbutils का उपयोग करता है।
final ResultSetHandler<User> handler = new ResultSetHandler<User>() {
@Override
public User handle(ResultSet rs) throws SQLException {
User user = null;
if (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
}
return user;
}
};
final User user = run.query(
"SELECT id, username, password FROM users WHERE username = ? AND active = 2 LIMIT 1;", handler,
username);
यह एक सामान्य वर्ग में QueryRunner
लपेट और इतने सामान्य T
ResultSet साथ instanciate हैंडलर क्वेरी विधि ओवरराइड करने के लिए संभव है। मैं सुनिश्चित करता हूं कि T
प्रकार ResultSet
को स्वीकार करने वाला एक निर्माता होगा।
:
public class QueryExecuter<T> extends QueryRunner {
private ResultSetHandler<T> _handler;
public QueryExecuter(){//The T type was for testing haha
super();
handler = new ResultSetHandler<T>() {
@Override
public T handle(ResultSet rs) throws SQLException {
T object = null;
if (rs.next()) {
object = new T(rs);
}
return object;
}
};
}
}
मैं अगर आप समझ जाएंगे कि पता नहीं है, लेकिन मैं तो उम्मीद है, मुझसे पूछते हैं अगर आप अधिक विवरण या एक बेहतर स्पष्टीकरण चाहते हैं।
संपादित
मैं मैं सामान्य प्रकार है कि विभिन्न वस्तुओं के सभी होगा फैली के बजाय एक AbstractClass इस्तेमाल कर सकते हैं सोचा लेकिन ऐसा लगता है जैसे मैं एक सार निर्माता नहीं लिख सकते हैं। क्या मुझे एक स्थिर विधि बनाना होगा जो ऑब्जेक्ट का उदाहरण लौटाए:
public abstract class DatabaseEntity {
public static abstract DatabaseEntity create(ResultSet rs);//even this doesn't work...
}
आपको कन्स्ट्रक्टर में 'टी टाइप' पास करने की आवश्यकता क्यों है? – yair
प्रतिबिंब का उपयोग करें आप परिणाम सेट –