क्या जावा में एक विधि है कि यह जांचने के लिए कि कोई स्ट्रिंग क्लास नाम के रूप में उपयोग की जा सकती है या नहीं?कक्षा का नाम वैध है या नहीं, यह कैसे जांचें?
उत्तर
याप -
Class.forName(String className);
यह वर्ग या दिए गए स्ट्रिंग नाम के साथ इंटरफेस के साथ जुड़े कक्षा वस्तु देता है। और Exceptions
LinkageError - if the linkage fails
ExceptionInInitializerError - if the initialization provoked by this method fails
ClassNotFoundException - if the class cannot be located
यह जांचता है कि वर्ग मौजूद है या नहीं, यह नहीं कि स्ट्रिंग क्लास नाम के रूप में उपयोग के लिए कानूनी है या नहीं (ओपी क्या जानना चाहता है)। –
@ टेड मैंने सिर्फ जानकारी दी है और मुझे लगता है कि मिस्टर द्वारा सुझाए गए कार्यों को बनाने के लिए पर्याप्त जानकारी होगी। –
मुझे असहमत होना चाहिए। ओपी जानना चाहता है कि क्या नाम कक्षा के नाम के रूप में मान्य होगा, न कि कक्षा मौजूद है या नहीं। आपके सुझाव के साथ समस्या यह है कि यह कानूनी नामों के लिए 'foo.bar" '(यदि वर्ग मौजूद नहीं है) और गैरकानूनी नामों के लिए' "! =?" 'के समान 'क्लास नॉटफाउंड अपवाद' को फेंक देगा। –
फेंकता केवल, Class.forName(String name)
विधि, जो इस प्रकार यह परीक्षण करने के लिए इस्तेमाल किया जा सकता के साथ:
public static boolean classExists(String className)
{
try
{
Class.forName(className);
return true;
}
catch(ClassNotFoundException ex)
{
return false;
}
}
संपादित करें: हैं, के रूप में dashrb ने कहा, यदि आप एक के लिए पूछ रहे हैं यह निर्धारित करने का तरीका है कि एक स्ट्रिंग का उपयोग कक्षा के नाम के रूप में किया जा सकता है (यदि उस नाम से पहले से ही एक कक्षा है), तो आपको जो विधि चाहिए वह ऊपर दी गई विधि का संयोजन है (बूलियन फ़्लिप किए गए हैं, जैसा कि आप कर सकते हैं ' टी नामों का पुन: उपयोग करें), और यह जांचने के लिए एक जांच के साथ कि स्ट्रिंग जावा-आरक्षित कीवर्ड है या नहीं। मुझे हाल ही में एक ही समस्या थी और इसके लिए एक यूटिलिटी क्लास बनाया जिसे आप here पा सकते हैं। मैं इसे आपके लिए नहीं लिखूंगा, लेकिन आपको मूल रूप से !JavaKeywords.isKeyword(className)
के लिए चेक में जोड़ने की आवश्यकता है।
संपादित करें 2:
return Character.isUpperCase(className.charAt(0));
संपादित 3: और निश्चित रूप से, अगर आप भी आम तौर पर स्वीकार कोडिंग मानकों लागू करना चाहते हैं, तो आप सिर्फ यह सुनिश्चित करें कि वर्ग के नाम के साथ बड़े अक्षर से शुरू होता है बना सकता है: जैसा कि टेड होप बताते हैं, यहां तक कि एक जावा कीवर्ड भी एक वर्ग का नाम अमान्य करता है, और जावाकेडवर्ड्स का उपयोग मेरे उत्पादन अनुप्रयोगों में से एक में किया जाता है, इसलिए मैंने updated version बनाया है जिसमें विधि containsKeyword(String toCheck)
है जो इस घटना की जांच भी करेगा। विधि (कृपया ध्यान दें कि आप भी कक्षा में कीवर्ड की सूची की जरूरत है) इस प्रकार है:
public static boolean containsKeyword(String toCheck)
{
toCheck = toCheck.toLowerCase();
for(String keyword : keywords)
{
if(toCheck.equals(keyword) || toCheck.endsWith("." + keyword) ||
toCheck.startsWith(keyword + ".") || toCheck.contains("." + keyword + "."))
{
return true;
}//End if
}//End for
return false;
}//End containsKeyword()
आपकी संपादन पोस्ट वह उत्तर है जो मुझे चाहिए। धन्यवाद! – Maxii
आपको पूंजी होने के लिए पहले पत्र की आवश्यकता नहीं है। – tcb
@ टीसीबी मुझे पता है, लेकिन कक्षाओं के साथ कक्षाएं शुरू करने के लिए यह काफी मानक अभ्यास है, जिसे मैं निश्चित रूप से सुनिश्चित करता हूं कि अंतर्निहित पैकेज में प्रत्येक गैर-आदिम वर्ग है। – MrLore
मैं जावा कीवर्ड की सूची कृपया MrLore द्वारा की पेशकश का इस्तेमाल किया।
private static final Set<String> javaKeywords = new HashSet<String>(Arrays.asList(
"abstract", "assert", "boolean", "break", "byte",
"case", "catch", "char", "class", "const",
"continue", "default", "do", "double", "else",
"enum", "extends", "false", "final", "finally",
"float", "for", "goto", "if", "implements",
"import", "instanceof", "int", "interface", "long",
"native", "new", "null", "package", "private",
"protected", "public", "return", "short", "static",
"strictfp", "super", "switch", "synchronized", "this",
"throw", "throws", "transient", "true", "try",
"void", "volatile", "while"
));
private static final Pattern JAVA_CLASS_NAME_PART_PATTERN =
Pattern.compile("[A-Za-z_$]+[a-zA-Z0-9_$]*");
public static boolean isJavaClassName(String text) {
for (String part : text.split("\\.")) {
if (javaKeywords.contains(part) ||
!JAVA_CLASS_NAME_PART_PATTERN.matcher(part).matches()) {
return false;
}
}
return text.length() > 0;
}
यह 'com.example.true' जैसे नामों के साथ ठीक से सौदा नहीं करेगा (जो एक अवैध नाम है क्योंकि नाम का एक _component_ एक कीवर्ड है)। ध्यान दें कि परीक्षण को "com.example जैसे नामों को भी अनुमति देने की आवश्यकता है .true_fact "' –
@ टेड हॉप निश्चित। धन्यवाद। – tcb
बिल्कुल तय नहीं है। यह अभी भी "com.example.true" जैसे नामों की अनुमति देगा। –
SourceVersion.isName
का उपयोग पूरी तरह से योग्य नामों की जांच के लिए किया जा सकता है।
boolean isValidName (String className) {
return SourceVersion.isIdentifier(className) && !SourceVersion.isKeyword(className);
}
आप तीन साल देर हो चुकी हैं पार्टी, लेकिन यह ठीक तरह से जाने का रास्ता है। – mwoodman
- 1. कैसे जांचें कि कक्षा शुरू हुई है या नहीं?
- 2. यह कैसे जांचें कि कोई सूचक मान्य है या नहीं?
- 3. मेल पता कैसे जांचें या नहीं है?
- 4. यह कैसे जांचें कि शनिवार/रविवार है या नहीं?
- 5. रेल में छवि मौजूद है या नहीं, यह कैसे जांचें?
- 6. स्ट्रिंग को कैसे जांचें यदि यह ASCII है या नहीं?
- 7. यह कैसे जांचें कि ओपनसीवी विंडो बंद है या नहीं
- 8. सी # - कैसे जांचें कि नामस्थान, कक्षा या विधि सी # में मौजूद है या नहीं?
- 9. यह निर्धारित करने के लिए कि कोई स्ट्रिंग वैध चर नाम है या नहीं?
- 10. कैसे जांचें कि एक बाइट सरणी वैध छवि है या नहीं?
- 11. ब्राउज़र कैसे HTML5 का समर्थन करता है या नहीं जांचें?
- 12. यह बताने का तरीका है कि पूर्वजों रूबी में कक्षा या मॉड्यूल है या नहीं?
- 13. कैसे जांचें कि UITextField का टेक्स्ट मान्य ईमेल है या नहीं?
- 14. कैसे जांचें कि सरणी शून्य या खाली है या नहीं?
- 15. यह कैसे जांचें कि वर्ड पैराग्राफ सामग्री तालिका का हिस्सा है या नहीं?
- 16. क्या यह वैध JSON है?
- 17. कैसे जांचें कि सरणी खाली नहीं है या नहीं?
- 18. यह कैसे जांचें कि ऐप सीपीयू-बाध्य या मेमोरी-बाध्य है या नहीं?
- 19. यह कैसे जांचें कि दिया गया शब्द बहुवचन या एकवचन रूप में है या नहीं?
- 20. जांचें कि सॉकेट कनेक्ट है या नहीं
- 21. क्या यह वैध सी ++ कोड है?
- 22. स्थिर कक्षा या नहीं
- 23. कक्षा का नाम C++
- 24. यह निर्धारित करने के लिए प्रतिबिंब का उपयोग कैसे करें कि कक्षा आंतरिक है या नहीं?
- 25. यह कैसे जांचें कि इस जावास्क्रिप्ट सरणी में मान मौजूद है या नहीं?
- 26. कैसे जांचें कि डेल्फी कक्षा को अमूर्त घोषित किया गया है या नहीं?
- 27. जांचें कि .NET का पूरा संस्करण स्थापित है या नहीं?
- 28. जावास्क्रिप्ट: कक्षा का नाम
- 29. सरणी सूची क्या है या नहीं जांचें?
- 30. जांचें कि फ़ाइल मौजूद है या नहीं,
[नियमित अभिव्यक्ति पूरी तरह से योग्य जावा वर्गों मिलान] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/5205339:
कोई
.
रों अनुमति दी जानी चाहिए, तो जांच इस तरह से किया जा सकता है/नियमित-अभिव्यक्ति-मिलान-पूरी तरह से योग्य-जावा-कक्षाएं) –वह पूछ रहा है कि नाम कानूनी नाम होगा, भले ही कक्षा वास्तव में मौजूद न हो। (मुझे लगता है) – dashrb
हाँ मैं प्रतिबिंब और नाम के साथ एक नई कक्षा बनाना चाहता हूं ... इसलिए मुझे यह जांचना है कि नाम मान्य है – Maxii