क्या यह विधि true
किसी भी तरह से वापस आ सकती है?क्या "आवृत्ति शून्य" हमेशा झूठी वापसी करता है?
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
क्या यह विधि true
किसी भी तरह से वापस आ सकती है?क्या "आवृत्ति शून्य" हमेशा झूठी वापसी करता है?
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
हाँ, पर मुझे यकीन है कि वास्तव में उपयोगी नहीं है कर रहा हूँ:
public static void main(final String[] args) throws Exception {
final Constructor c = Void.class.getDeclaredConstructors()[0];
c.setAccessible(true);
System.out.println(c.newInstance(null) instanceof Void);
}
एक Void
वर्ग instantiated नहीं किया जा सकता है, ताकि सामान्य रूप से अपने कोड Void
उदाहरणों से निपटने के लिए की आवश्यकता नहीं होगी। इसके बाद के संस्करण कोड स्निपेट सिर्फ तुम क्या कहर आप जब प्रतिबिंब का उपयोग कर सकते हैं दिलाने का एक उदाहरण है ... ;-)
+1 प्रतिबिंब "दुरुपयोग" –
+1 बहुत अच्छा है! बीटीडब्ल्यू, आप बस 'c.newInstance()' का उपयोग करें ('null' param की आवश्यकता नहीं है) – Bohemian
+1 प्रतिबिंब के माध्यम से बनाने से रोका गया एकमात्र वर्ग कक्षा है। –
नहीं। यह सच आप इसे और प्रकार Void
का एक तर्क पारित करने के लिए है वापसी बनाने के लिए। लेकिन कक्षा शून्य का कन्स्ट्रक्टर निजी है, इसलिए आप इसे कॉल नहीं कर सकते हैं। इसके अलावा, यह कक्षा अंतिम है, इसलिए आप इसे भी विस्तारित नहीं कर सकते हैं। इस प्रकार आप कक्षा Void
का उदाहरण नहीं बना सकते हैं। लेकिन आपकी विधि को सही करने के लिए इसकी आवश्यकता है।
बीटीडब्ल्यू: यदि आप वास्तव में ऐसा करना चाहते हैं, तो प्रतिबिंब द्वारा Void
के निर्माता को कॉल करें। लेकिन मैं इस बारे में एक सिस्टम दुरुपयोग अभ्यास के रूप में सोच सकता हूं। सौभाग्य।
नहीं:
Constructor<Void> cv = Void.class.getDeclaredConstructor();
cv.setAccessible(true);
Void v = cv.newInstance();
System.out.println(v instanceof Void); //-> true
मैं असफल देखने के लिए अगर एक मूल्य void
(या Void
), के बाद से की तरह कहा वें बार, instanciated नहीं किया जा सकता, या यहाँ तक कि के साथ हैकिंग के बिना बढ़ाया का एक उदाहरण है तुम क्यों की जाँच करेगा परछाई। हालांकि, एक और उपयोगी स्थिति के लिए, यदि आप जानना चाहते हैं कि दिया गया Class
शून्य प्रकार का है, तो आप instanceof
का उपयोग नहीं करेंगे और आपका विधि पैरामीटर इसके बजाय Class<?>
प्रकार का होगा। एक परीक्षण मामला होगा:
public class VoidCheckTest {
public static void main(String...args) throws SecurityException, NoSuchMethodException {
Class<VoidCheckTest> c = VoidCheckTest.class;
Method m = c.getMethod("main", String[].class);
System.out.println(m.getReturnType().getName() + " = " + isVoid(m.getReturnType()));
}
private static boolean isVoid(Class<?> t) {
return Void.class.isAssignableFrom(t) || void.class.equals(t);
}
}
जो
void = true
वहाँ अन्य उपयोग के मामलों इस विधि के लिए, लेकिन मैं नहीं किसी अन्य अभी देख पा रहे हैं हो सकता है उत्पादन होगा।
आप इस विधि को कैसे कॉल करते हैं? क्या आप कुछ उदाहरण दे सकते हैं? –
आप यह परीक्षण क्यों करना चाहते हैं? इस सब के पीछे कुछ कहानी होनी चाहिए। –
@ होवरक्राफ्ट मैं बस इन मुश्किल व्यवहारों की तरह हूं, मैं "शून्य" –