2011-09-21 13 views
21

सी # में मैं एक चर वैल्यू को प्रश्न चिह्न के साथ अनुमति देने के लिए कर सकता हूं। मैं एक सच/झूठा/शून्य परिणाम चाहते हैं। मैं इसे डिफ़ॉल्ट रूप से शून्य पर सेट करना चाहता हूं। बूलियन परीक्षण परिणाम से सच/गलत पर सेट किया जाएगा, लेकिन कभी-कभी परीक्षण नहीं चलाया जाता है और एक बूलियन जावा में गलत होने के लिए डिफ़ॉल्ट होता है, इसलिए परीक्षण करने के लिए तीसरा विकल्प अच्छा होगा।क्या जावा शून्य प्रकारों को अनुमति देता है?

सी # उदाहरण:

bool? bPassed = null; 

करता जावा इस के समान कुछ भी नहीं है?

+4

जावा नल संदर्भ प्रकार, लेकिन नहीं नल पुरातन है। – BoltClock

उत्तर

32

सं

इसके बजाय, आप बॉक्स्ड Boolean वर्ग (जो बल्कि एक आदिम प्रकार एक साधारण वर्ग है) का उपयोग कर सकते हैं, या एक थ्री-वैल्यूड enum

+0

दूसरे शब्दों में "हां", चूंकि संबंधित वर्ग सी # समकक्ष की तरह कार्य करता है (सी # संस्करण को छोड़कर एक संरचना है, और जावा एक वर्ग है)। – ToolmakerSteve

+1

@ToolmakerSteve: नहीं; वे कई तरीकों से समान नहीं हैं। – SLaks

+1

@ एसएलएक्स "वे कई तरीकों से समान नहीं हैं" क्या आप कुछ उदाहरण और/या एक प्रासंगिक लिंक प्रदान कर सकते हैं? धन्यवाद। –

7

नहीं, जावा primitives में शून्य मूल्य नहीं हो सकता है, यदि आप यह सुविधा चाहते हैं, तो आप इसके बजाय Boolean का उपयोग करना चाहेंगे।

12

आप का उपयोग कर सकते हैं:

Boolean b = null;

है कि, जावा में java.lang.Boolean वस्तु।

Boolean b = true; या Boolean b = false;

5

जावा में, आदिम प्रकार नल नहीं हो सकता:

और फिर भी एक साधारण असाइनमेंट द्वारा सच या झूठी निर्धारित किया है। हालांकि, आप Boolean और दोस्तों का उपयोग कर सकते हैं।

2

नहीं लेकिन आप null

7

हाँ आप कर सकते हैं डाल करने के लिए आदिम boolean प्रकार के बजाय Boolean वर्ग का उपयोग कर सकते हैं।

इस तरह की चीज करने के लिए, जावा के प्रत्येक प्राचीन प्रकार के लिए एक रैपर वर्ग है। यदि आप अपने चर को रैपर वर्ग का एक उदाहरण बनाते हैं, तो इसे किसी भी सामान्य चर की तरह null असाइन किया जा सकता है।

बजाय:

boolean myval; 

... आप का उपयोग कर सकते हैं:

Boolean myval = null; 

आप इस तरह यह निर्दिष्ट कर सकते हैं:

myval = new Boolean(true); 

... और अपने आदिम मूल्य प्राप्त इस तरह से बाहर:

if (myval.booleanValue() == false) { 
    // ... 
} 

हर आदिम प्रकार (int, boolean, float, ...) को उससे संबंधित आवरण प्रकार है (Integer, Boolean, Float, ...)।

जावा के autoboxing सुविधा संकलक कभी कभी स्वतः अपनी आदिम मूल्य में आवरण प्रकार विवश और इसके विपरीत करने के लिए अनुमति देता है। लेकिन, यदि आप संकलक इसे समझ नहीं सकते हैं तो आप इसे मैन्युअल रूप से कर सकते हैं।

0

आप वस्तु का उपयोग कर रहे हैं, तो यह नहींnull

अनुमति देते हैं यही कारण है कि जावा Wrapper Class

2

सुनिश्चित करें कि आप जा सकते हैं है कि आप आदिम डेटा प्रकार का उपयोग कर रहे हैं, तो null

की अनुमति देता है, यह बूलियन के साथ है, लेकिन यह अधिक स्पष्ट अपने प्रकार "मूल्य" या "नहीं मान" हो सकता है बनाने के लिए, यह एक आवरण वर्ग कि कम या ज्यादा क्या ? प्रकार सी # में क्या करता है बनाने के लिए बहुत आसान है:

public class Nullable<T> { 
    private T value; 
    public Nullable() { value = null; } 
    public Nullable(T init) { value = init; } 
    public void set(T v) { value = v; } 
    public boolean hasValue() { return value != null; } 
    public T value() { return value; } 
    public T valueOrDefault(T defaultValue) { return value == null ? defaultValue : value; } 
} 

तो फिर तुम इसे इस तरह उपयोग कर सकते हैं:

private Nullable<Integer> myInt = new Nullable<>(); 
... 
myInt.set(5); 
... 
if (myInt.hasValue()) 
    .... 
int foo = myInt.valueOrDefault(10); 

ध्यान दें कि कुछ इस तरह Java8 के बाद से मानक है: Optional वर्ग। https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html

संबंधित मुद्दे

 संबंधित मुद्दे