2012-02-26 34 views
38

Tôi đã tự hỏi liệu nó có thể thực hiện một phép toán ba giây nhưng không trả lại bất cứ thứ gì.Java: Ternary không trả lại. (Để gọi phương thức)

Nếu Java không thể thực hiện được bằng các ngôn ngữ khác, nếu có thì ngôn ngữ nào sẽ áp dụng?

name.isChecked() ? name.setChecked(true):name.setChecked(false); 
+1

Có thể trong JavaScript, ví dụ ở đây: http://stackoverflow.com/a/6260001/320399 – blong

Trả lời

40

Không, bạn không thể. Nhưng điểm quan trọng của vấn đề này trên một tuyên bố if-else là gì? Bạn có thực sự cố gắng để lưu 7 ký tự?

if (name.isChecked()) { 
    name.setChecked(true); 
} else { 
    name.setChecked(false); 
} 

hoặc nếu bạn thích phong cách xấu:

if (name.isChecked()) name.setChecked(true); else name.setChecked(false); 

Đừng bận tâm thực tế là bạn chỉ có thể làm được (trong trường hợp này):

name.setChecked(name.isChecked()); 

Điểm của ternary hay " toán tử "có điều kiện" là đưa các điều kiện vào một biểu thức . Nói cách khác, điều này:

int max = a > b ? a : b; 

có nghĩa là để được viết tắt cho việc này:

int max; 
if (a > b) { 
    max = a; 
} else { 
    max = b; 
} 

Nếu không có giá trị được sản xuất, các nhà điều hành có điều kiện không phải là một phím tắt.

0

Trong java mã sau đây không thể xảy ra:

(your-condition) ? (true-statements) : (false-statements) 

cho mẫu mà bạn không thể biên dịch mã snipet sau:

(1==1) ? System.out.println("") : System.out.println(""); 

bạn đạt được sau lỗi biên dịch:

The left-hand side of an assignment must be a variable 
+0

'(bạn-condition)? (true-statements): (false-statements) 'có thể trong java nhưng nó phải trả về một giá trị (nó không thể bị vô hiệu) và bạn phải gán nó cho một biến. – jalv1039

5

Đôi khi, bạn có thể sử dụng phép toán ba giây trên các đối số phương thức để giải quyết yêu cầu của bạn.

name.setChecked(name.isChecked() ? true : false); 

bằng cách này là giải pháp tốt nhất cho peoblem của bạn là

name.setCecked(name:isChecked()); 
10

I was wondering if it was possible to do a ternary operation but without returning anything.

Không nó không phải là có thể:

  1. The 2nd và toán hạng thứ 3 bắt buộc phải được phi biểu thức không có; tức là họ phải sản xuất một số giá trị thực tế.

    "It is a compile-time error for either the second or the third operand expression to be an invocation of a void method." - JLS 15.25 .

  2. Biểu thức bậc ba là biểu thức và không thể sử dụng làm câu lệnh.

    "Certain kinds of expressions may be used as statements by following them with semicolons." ... and the ternary expression is not one of those kinds - JLS 14.8 .

Nếu bạn thực sự, thực sự muốn sử dụng một biểu ternary nhưng không sử dụng giá trị của biểu thức, thì điều đơn giản nhất là để gán giá trị cho một biến giả, và thêm một chú thích để ngăn chặn cảnh báo về biến không được sử dụng.

Nhưng ý tưởng tốt hơn là sử dụng câu lệnh đồng bằng if.

If it's not possible in Java is it possible in other languages, if so which ones apply?

Tôi hơi mệt, nhưng tôi tin rằng C, C++ và Perl đều cho phép biểu thức tùy ý được sử dụng ở những nơi không sử dụng giá trị của chúng.

0

Bạn phải trả lại một số giá trị và nó sẽ không hoạt động nếu bạn muốn nó hoạt động như một phương thức trống thực hiện một số hành động mà không trả về một giá trị.

Hope this helps ...

+0

Câu hỏi này đã được trả lời. Vui lòng, [đọc Câu Hỏi Thường Gặp để tìm hiểu cách đặt câu hỏi đúng cách] (http://stackoverflow.com/help/how-to-ask). – zuazo

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