2012-01-20 33 views
6

Tôi có một câu hỏi thú vị. Tôi hiểu mã C# sau cho phép người dùng nhập các giá trị null vào các tham số:Tương đương Java cho mã C# sau là gì?

public DateTime? date (DateTime dt) {} 

Tương đương khi mã hóa bằng Java là gì?

+0

Tôi không nghĩ rằng có một. –

+0

Phương thức này trả về một DateTime không có giá trị, nhưng đối số của nó không phải là nullable. –

+1

Ví dụ 'C#' cho phép trả về DateTime vô hiệu. DateTime được truyền dưới dạng tham số không được rỗng. –

Trả lời

5

Nếu tôi nhớ chính xác từng đối tượng trong java có thể bị vô hiệu. Các loại nguyên thủy (int, double, float, char v.v ...) không được rỗng. Để sử dụng null với chúng, bạn phải sử dụng đối tượng Object của chúng (Integer, Double, Float...)

Về ngày tháng, java.util.Date là một đối tượng, vì vậy nó có thể là rỗng. Tương tự với Lịch & GregorianCalendar.

mã tương đương sẽ là một cái gì đó như:

public Date date(Date dt) throws NullPointerException { 
    if (dt == null) throw new NullPointerException(); 
    ... 
} 

Trong C# bạn có thể sử dụng không? để cho phép null val trong các kiểu nguyên thủy (ví dụ: để thực thi các lỗi tham chiếu null đối tượng). Tôi không hiểu tại sao điều này làm phiền bạn. Nếu bạn cần ví dụ một tham số số nguyên null trong java, bạn chỉ cần sử dụng java.lang.Integer và không phải kiểu nguyên thủy int.

+0

Câu hỏi này thực sự là cập nhật kiến ​​thức của tôi với cú pháp C# và Java và chỉ đơn giản là hiểu thực hành tốt nhất để thiết lập các tham số nullable. Rất cám ơn câu trả lời của bạn. – AWb

+0

C# và java có phần tương tự nhưng chúng vẫn là hai ngôn ngữ khác nhau. Có một số điều bạn sẽ tìm thấy trong Java mà không có đối tác trong C# và viceversa. Đề xuất của tôi không phải là để so sánh các vấn đề cú pháp cụ thể, nhưng so sánh chúng về chức năng.Chúc một ngày tốt lành. – BigMike

+0

Trên thực tế ném NullPointerException là một lỗi thời gian chạy trong khi cú pháp C# gây ra một lỗi biên dịch nếu bạn cố gắng vượt qua null. Thay vì những thứ khác nhau. –

0

Java không hỗ trợ các loại giá trị do người dùng xác định (ví dụ: các loại không thể rỗng). Về vấn đề này, một đối tượng DateTime Java đã hỗ trợ nullable bằng cách cho phép null được gán.

Đối với các loại khác, chẳng hạn như intdouble, bạn có thể đạt được hiệu quả tương tự bằng cách sử dụng các phiên bản đóng hộp IntegerDouble được phép được gán null.

1

Vì một ngày trong Java là một lớp, tham chiếu đến nó có thể là rỗng. Nói cách khác;

public Date date(Date dt) { } 

... là phiên bản Java giống nhau.

Lưu ý rằng tham số cũng có thể là rỗng trong Java, mà nó không thể trong phiên bản C#.

+0

không, để bằng nhau bạn phải kiểm tra tham số dt và ném NullPointerException nếu giá trị đã cho là null (tất nhiên tôi đang đùa: P) – BigMike

Các vấn đề liên quan