मैं इसके नाम का उपयोग करके निर्दिष्ट कक्षा का उदाहरण बनाना चाहता हूं। मेरा कोड नीचे दिखाया गया है।जेनिक्स और क्लास .forName
मुझे एक कंपाइलर चेतावनी मिलती है। क्या मैं इसे सही तरीके से कर रहा हूं? क्या कक्षा के नाम का उपयोग करना और उस प्रकार का उदाहरण प्राप्त करना भी संभव है, क्योंकि मुझे नहीं लगता कि संकलक का कोई तरीका है कि यह जानने के लिए कि किस प्रकार का होना चाहिए?
public static <T> T create(final String className) {
try {
final Class<?> clazz = Class.forName(className);
//WARNING: Type safety: Unchecked cast from capture#2-of ? to T
return (T) create(clazz);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static <T> T create(final Class<T> classToCreate) {
final Constructor<T> constructor;
try {
constructor = classToCreate.getDeclaredConstructor();
final T result = constructor.newInstance();
return result;
}
catch (Exception e) {
e.printStackTrace();
}
}
धन्यवाद
हाँ, इस के रूप में करीब आप जावा के साथ मिल सकता है। वास्तविक वस्तु के निर्माण के लिए अभी भी कुछ चालें की जा रही हैं, लेकिन मैं विशिष्टताओं में शामिल नहीं होने जा रहा हूं क्योंकि उन चालों को मेरी उपयोगिता कक्षा में लागू किया गया है, जैसे ही मुझे उचित पता चल रहा है वहां सभी जावा प्रोग्रामर के बीच इसे फैलाने के लिए चैनल। – Esko
@Esko, Google कोड (रिलीज़ संस्करणों के लिए) और/या गीथब (वास्तविक कोड के लिए) पर विचार करें –
आपको इसे अंतिम श्रेणी क्लैज = (कक्षा ) कक्षा .forName (className) संकलित करने के लिए एक कलाकार जोड़ने की आवश्यकता है। asSubclass (ifaceClass); ' –