मैं यह सुनिश्चित करने के लिए कैसे जांच सकता हूं कि मेरा चर एक int, array, double, etc ... है?
संपादित करें: उदाहरण के लिए, मैं कैसे जांच सकता हूं कि एक चर एक सरणी है? क्या ऐसा करने के लिए कुछ कार्य है?
मैं यह सुनिश्चित करने के लिए कैसे जांच सकता हूं कि मेरा चर एक int, array, double, etc ... है?
संपादित करें: उदाहरण के लिए, मैं कैसे जांच सकता हूं कि एक चर एक सरणी है? क्या ऐसा करने के लिए कुछ कार्य है?
जवाबों:
जावा एक वैधानिक रूप से टाइप की जाने वाली भाषा है, इसलिए कंपाइलर आपके लिए यह सबसे अधिक जाँच करता है। एक बार जब आप एक चर को एक निश्चित प्रकार घोषित करते हैं, तो संकलक यह सुनिश्चित करेगा कि यह केवल उस प्रकार के मूल्यों (या मान जो उस प्रकार के उप-प्रकार हैं) को सौंपा गया है।
आपके द्वारा दिए गए उदाहरण ( int, सरणी, double) ये सभी आदिम हैं, और इनके कोई उप-प्रकार नहीं हैं। इस प्रकार, यदि आप एक चर को घोषित करते हैं int:
int x;
आप यह सुनिश्चित कर सकते हैं कि यह केवल intमूल्यों को धारण करेगा ।
यदि आपने एक चर को घोषित किया है List, हालांकि, यह संभव है कि चर उप-प्रकार का आयोजन करेगा List। इन के उदाहरण में शामिल ArrayList, LinkedListआदि
यदि आपके पास एक Listचर है, और आपको यह जानना आवश्यक है कि क्या यह एक था ArrayList, तो आप निम्न कार्य कर सकते हैं:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
हालाँकि, यदि आप स्वयं को यह सोचते हुए पाते हैं कि आपको ऐसा करने की आवश्यकता है, तो आप अपने दृष्टिकोण पर फिर से विचार कर सकते हैं। ज्यादातर मामलों में, यदि आप ऑब्जेक्ट-ओरिएंटेड सिद्धांतों का पालन करते हैं, तो आपको ऐसा करने की आवश्यकता नहीं होगी। हालांकि, हर नियम के अपवाद हैं।
वास्तव में जावा की विधि अधिभार क्षमता का दुरुपयोग करके अपने स्वयं के परीक्षक को रोल करना काफी आसान है। हालाँकि मैं अभी भी उत्सुक हूँ अगर sdk में कोई आधिकारिक तरीका है।
उदाहरण:
class Typetester {
void printType(byte x) {
System.out.println(x + " is an byte");
}
void printType(int x) {
System.out.println(x + " is an int");
}
void printType(float x) {
System.out.println(x + " is an float");
}
void printType(double x) {
System.out.println(x + " is an double");
}
void printType(char x) {
System.out.println(x + " is an char");
}
}
फिर:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()- आपको संदर्भित वास्तविक वस्तु aका डेटाटाइप देगा, लेकिन उस डेटाटाइप को नहीं, जिसे चर aमूल रूप से घोषित किया गया था या बाद में डाला गया था।
boolean b = a instanceof String- आपको बताएंगे कि वास्तविक वस्तु किसके द्वारा निर्दिष्ट की गई aहै या नहीं । फिर, डेटाटाइप कि चरa को मूल रूप से घोषित किया गया था या बाद में उदाहरण के लिए संचालक के परिणाम पर कोई असर नहीं पड़ा।
मैंने इसकी जानकारी ली: आप जावा में परिवर्तनशील प्रकार को कैसे जानते हैं?
ऐसा हो सकता है। मैं Stringएक इंट में पार्स करने की कोशिश कर रहा हूं और मैं जानना चाहता हूं कि क्या मेरीInteger.parseInt(s.substring(a, b)) की इच्छा है एक इंट या कचरा बाहर निकाल रहा हूं इससे पहले कि मैं इसे योग करने की कोशिश करूं।
वैसे, यह प्रतिबिंब के रूप में जाना जाता है। इस विषय पर कुछ और जानकारी यहाँ दी गई है: http://docs.oracle.com/javase/tutorial/reflect/
आप इंटेगर के बजाय इंट के साथ काम कर सकते हैं, डबल के बजाय डबल, आदि (जैसे सभी आदिम प्रकारों के लिए ऐसी कक्षाएं मौजूद हैं)। तब आप ऑपरेटर इंस्टाफॉ का उपयोग कर सकते हैं, जैसेif(var instanceof Integer){...}
महज प्रयोग करें:
.getClass().getSimpleName();
उदाहरण:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
आउटपुट:
StringBuilder
randSBNULL रखने पर यह काम नहीं करता है।
खैर, मुझे लगता है कि चर के प्रकार की जांच इस तरह से की जा सकती है।
public <T extends Object> void checkType(T object) {
if (object instanceof Integer)
System.out.println("Integer ");
else if(object instanceof Double)
System.out.println("Double ");
else if(object instanceof Float)
System.out.println("Float : ");
else if(object instanceof List)
System.out.println("List! ");
else if(object instanceof Set)
System.out.println("Set! ");
}
इस तरह से आपको कई अतिभारित तरीकों की आवश्यकता नहीं है। मुझे लगता है कि अतिरिक्त लाभों के कारण सरणियों पर संग्रह का उपयोग करना अच्छा है। यह कहने के बाद, मुझे नहीं पता कि कैसे एक सरणी प्रकार के लिए जाँच करें। हो सकता है कि कोई इस समाधान में सुधार कर सकता है। उम्मीद है की यह मदद करेगा!
PS हाँ, मुझे पता है कि यह भी आदिम के लिए जाँच नहीं करता है।
आपके प्रश्न का पहला भाग निरर्थक है। ऐसी कोई परिस्थिति नहीं है जिसमें आप संकलन समय पर एक आदिम चर के प्रकार को नहीं जानते हैं।
दूसरा भाग फिर से शुरू करें, एकमात्र परिस्थिति जिसे आप पहले से नहीं जानते हैं कि एक चर एक सरणी है यदि यह एक वस्तु है। किस मामले में object.getClass().isArray()आपको बताएंगे।
मैंने इसका उपयोग किया: if(x.getClass() == MyClass.class){...}
मैं इनमें से किसी भी जवाब से खुश नहीं था, और जो सही है उसका कोई स्पष्टीकरण और नकारात्मक वोट नहीं है इसलिए मैंने चारों ओर खोजा, कुछ सामान पाया और इसे संपादित किया ताकि इसे समझना आसान हो। इसके साथ एक नाटक करें, न कि सीधे आगे के रूप में एक उम्मीद करेंगे।
//move your variable into an Object type
Object obj=whatYouAreChecking;
System.out.println(obj);
// moving the class type into a Class variable
Class cls=obj.getClass();
System.out.println(cls);
// convert that Class Variable to a neat String
String answer = cls.getSimpleName();
System.out.println(answer);
यहाँ एक विधि है:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
इनमें से कोई भी उत्तर काम नहीं करता है यदि चर एक गैर-विनिर्मित जेनरिक प्रकार है
और जो मुझे मिल सकता है, वह केवल एक बहुत ही बदसूरत वर्कअराउंड का उपयोग करना संभव है , या अपने फ़ंक्शन के लिए एक प्रारंभिक पैरामीटर में पारित करके, इसे इन-प्लेस बनाकर, यहां देखें:
<T> T MyMethod(...){ if(T.class == MyClass.class){...}}
मान्य नहीं है क्योंकि आप Tपैरामीटर को सीधे टाइप नहीं कर सकते हैं, क्योंकि यह रनटाइम के समय मिट जाता है।
<T> void MyMethod(T out, ...){ if(out.getClass() == MyClass.class){...}}
यह काम करता है क्योंकि कॉल करने से outपहले वेरिएबल को इंस्टेंट करने के लिए कॉल करने वाला जिम्मेदार होता है । यह तब भी एक अपवाद को फेंक देगा जब बाहर बुलाया जाता है, लेकिन लिंक किए गए समाधान की तुलना में, यह ऐसा करने का सबसे आसान तरीका है
मुझे पता है कि यह एक प्रकार का विशिष्ट अनुप्रयोग है, लेकिन चूँकि यह जावा के साथ एक वैरिएबल के प्रकार को खोजने के लिए Google पर पहला परिणाम है (और Tयह एक प्रकार का वैरिएबल है), मुझे लगता है कि इसे शामिल किया जाना चाहिए
आप इसे आसानी से Java.lang.Class.getSimpleName()विधि का उपयोग करके देख सकते हैं यदि चर में गैर-आदिम प्रकार है। यह आदिम प्रकार इंट, लंबे आदि के साथ काम नहीं करता है।
संदर्भ - यहाँ Oracle डॉक्स लिंक है
मूल रूप से, उदाहरण के लिए:
public class Kerem
{
public static void main(String[] args)
{
short x = 10;
short y = 3;
Object o = y;
System.out.println(o.getClass()); // java.lang.Short
}
}