है, मैं एक सी # कोड के बराबर जावा कोड लिखना चाहता हूं।जावा: एक ऑब्जेक्ट बनाएं जिसका प्रकार एक प्रकार पैरामीटर
public abstract class A<T> where T : A<T>, new()
{
public static void Process()
{
Process(new T());
}
public static void Process(T t)
{
// Do Something...
}
}
public class B : A<B>
{
}
public class C : A<C>
{
}
जावा मेरी कोड के बराबर इस तरह दिखता है:
मेरे सी # कोड इस प्रकार है।
public abstract class A<T extends A<T>>
{
public static <T extends A<T>> void process()
{
process(new T()); // Error: Cannot instantiate the type T
}
public static <T extends A<T>> void process(T t)
{
// Do Something...
}
public class B extends A<B>
{
}
public class C extends A<C>
{
}
}
यहाँ "नई()" व्युत्पन्न एक डिफ़ॉल्ट constructer जो आधार वर्ग से 'नई टी() "कॉल करने के लिए संभव बनाता है लिखने के लिए कक्षाएं वर्ग घोषणा बलों में वाक्य रचना। दूसरे शब्दों में जब मैं बेस क्लास को लिख रहा हूं, मुझे यकीन है कि व्युत्पन्न कक्षा में एक डिफ़ॉल्ट कन्स्ट्रक्टर होगा, ताकि मैं बेस क्लास से व्युत्पन्न क्लास ऑब्जेक्ट को तुरंत चालू कर सकूं।
जावा में मेरी समस्या है, मैं सुपर क्लास से व्युत्पन्न क्लास ऑब्जेक्ट को तुरंत चालू नहीं कर सकता। मुझे "new T()"
कॉल के लिए त्रुटि मिलती है। क्या जावा में कोई सी # समान तरीका है या क्या मुझे प्रोटोटाइप पैटर्न और क्लोनिंग जैसे कुछ उपयोग करना चाहिए?
त्वरित उत्तर के लिए धन्यवाद। चूंकि मैं एक स्थिर विधि के अंदर एक नया उदाहरण बनाने की कोशिश कर रहा हूं, इसलिए मैं getClass() कॉल नहीं कर सकता। टी। क्लास के अलावा संकलन-समय निर्माण का उपयोग नहीं किया गया है। तो, प्रतिबिंब मेरे लिए एक समाधान की तरह प्रतीत नहीं होता है। या मैं इसे अभी तक नहीं मिला (:।। –
यह तभी उपवर्ग एक ठोस प्रकार पैरामीटर का उपयोग करता है काम करेंगे, तो उपवर्ग 'था सार्वजनिक वर्ग बी फैली एक ' उदाहरण के लिए, इस सटीक एक ही समस्या के लिए होता है मैं इसे खोजने प्रकार टोकन का उपयोग करने के लिए, लेकिन निर्माता या विधि में टोकन पारित करने के लिए फोन करने वाले की आवश्यकता के लिए बेहतर है। –