यह वास्तव में सरल है। यह जे 2 एसई 5 में पेश की गई एक नई सुविधा है। कक्षा के नाम के बाद कोणीय ब्रैकेट निर्दिष्ट करना मतलब है कि आप एक अस्थायी डेटा प्रकार बना रहे हैं जो किसी भी प्रकार का डेटा रख सकता है।
उदाहरण:
class A<T>{
T obj;
void add(T obj){
this.obj=obj;
}
T get(){
return obj;
}
}
public class generics {
static<E> void print(E[] elements){
for(E element:elements){
System.out.println(element);
}
}
public static void main(String[] args) {
A<String> obj=new A<String>();
A<Integer> obj1=new A<Integer>();
obj.add("hello");
obj1.add(6);
System.out.println(obj.get());
System.out.println(obj1.get());
Integer[] arr={1,3,5,7};
print(arr);
}
}
के बजाय <T>
, आप वास्तव में कुछ भी लिख सकते हैं और यह उसी तरह काम करेंगे। <T>
के स्थान पर <ABC>
लिखने का प्रयास करें।
यह सिर्फ सुविधा के लिए है:
<T>
किसी भी प्रकार
<E>
तत्व प्रकार
- संख्या प्रकार के रूप में
<N>
के रूप में रूप में निर्दिष्ट है
- मूल्य के रूप में
<V>
- कुंजी
रूप
<K>
लेकिन आप इसे जो कुछ भी चाहते हैं उसका नाम दे सकते हैं, इससे कोई फर्क नहीं पड़ता।
इसके अलावा, Integer
, String
, Boolean
आदि जावा के रैपर वर्ग हैं जो संकलन के दौरान प्रकारों की जांच में सहायता करते हैं। उदाहरण के लिए, उपर्युक्त कोड में, obj
String
प्रकार का है, इसलिए आप इसमें कोई अन्य प्रकार नहीं जोड़ सकते हैं (obj.add(1)
आज़माएं, यह एक त्रुटि डालेगा)। इसी प्रकार, obj1
Integer
प्रकार का है, आप इसमें कोई अन्य प्रकार नहीं जोड़ सकते हैं (obj1.add("hello")
आज़माएं, त्रुटि वहां होगी)।
स्रोत
2016-07-21 11:25:05
google जावा जेनेरिक –
मुझे आपके कोड को पार्स करना मुश्किल लगता है। शुरुआत के लिए कोई इंडेंटेशन नहीं है, और दो खुले ब्रेसिज़ हैं और केवल एक करीबी हैं। पूल या पूल फैक्ट्री के अंदर होना चाहिए 'टी createObject'? 'This.freeObjects = ... कहां होना चाहिए?क्या यह एक अलग उदाहरण है? इसे वहां रखना अवैध है; यह एक विधि के अंदर होना है। – mgiuca
अगर कोई '<>' (हीरा ऑपरेटर) के बारे में जानकारी ढूंढ रहा है जिसका उपयोग 'सूची सूची = नई ArrayList <>() की तरह किया जा सकता है;' https://docs.oracle.com/javase/7/docs पर जाएं /technotes/guides/language/type-inference-generic-instance-creation.html। –
Pshemo