Có cách nào tốt hơn để phủ nhận một boolean trong Java hơn là một if-other đơn giản không?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Có cách nào tốt hơn để phủ nhận một boolean trong Java hơn là một if-other đơn giản không?
if (theBoolean) {
theBoolean = false;
} else {
theBoolean = true;
}
Câu trả lời:
theBoolean = !theBoolean;
!!bool == !(!(bool)) == bool
.
--
toán tử (thực ra, hai trong số chúng, cùng với hai ++
toán tử), nhưng không định nghĩa !!
toán tử. Nếu bạn muốn -(-(integer))
bạn có thể sử dụng khoảng trắng giữa hai -
ký tự. Nhưng !!
phân tích như hai !
toán tử bất kể khoảng trắng.
theBoolean ^= true;
Ít tổ hợp phím hơn nếu biến của bạn dài hơn bốn chữ cái
Chỉnh sửa : mã có xu hướng trả về kết quả hữu ích khi được sử dụng làm thuật ngữ tìm kiếm của Google. Các mã ở trên không. Đối với những người cần nó, XOR bitwise như được mô tả ở đây .
theBoolean = !theBoolean;
hoặctheBoolean = theBoolean ? false : true;
Cách "rõ ràng" (đối với hầu hết mọi người)
theBoolean = !theBoolean;
Cách "ngắn nhất" (hầu hết thời gian)
theBoolean ^= true;
Cách "trực quan nhất" (không chắc chắn nhất)
theBoolean = theBoolean ? false : true;
theMethod( theBoolean ^= true );
Vì toán tử gán luôn trả về những gì đã được gán, nên điều này sẽ chuyển giá trị qua toán tử bitwise, và sau đó trả về giá trị mới được gán sẽ được sử dụng trong lệnh gọi phương thức.
C
, nhưng trong Java
đó không được phép trộn boolean và số nguyên (cũng có những thứ như while(1)
không thể có trong Java).
Nếu bạn sử dụng các giá trị BLLean NULL và coi chúng là sai, hãy thử điều này:
static public boolean toggle(Boolean aBoolean) {
if (aBoolean == null) return true;
else return !aBoolean;
}
Nếu bạn không trao các giá trị NULL Boolean, hãy thử điều này:
static public boolean toggle(boolean aBoolean) {
return !aBoolean;
}
Đây là sạch nhất vì chúng thể hiện ý định trong chữ ký phương thức, dễ đọc hơn so với ! toán tử, và có thể dễ dàng gỡ lỗi.
Sử dụng
boolean bTrue = true
boolean bFalse = false
boolean bNull = null
toggle(bTrue) // == false
toggle(bFalse) // == true
toggle(bNull) // == true
Tất nhiên, nếu bạn sử dụng Groovy hoặc một ngôn ngữ cho phép các phương thức mở rộng, bạn có thể đăng ký một tiện ích mở rộng và chỉ cần làm:
Boolean b = false
b = b.toggle() // == true
Boolean
và thực sự chuyển đổi nó trong phương thức (nhưng vẫn hơi mơ hồ).
Câu trả lời này được đưa ra khi tìm kiếm "java invert boolean function". Ví dụ dưới đây sẽ ngăn các công cụ phân tích tĩnh nhất định không thể xây dựng do logic phân nhánh. Điều này rất hữu ích nếu bạn cần đảo ngược một boolean và chưa xây dựng các bài kiểm tra đơn vị toàn diện;)
Boolean.valueOf(aBool).equals(false)
Hay cách khác:
Boolean.FALSE.equals(aBool)
hoặc là
Boolean.FALSE::equals
Boolean.FALSE::equals
đến một chức năng lập bản đồ thay vì viết một lambda nhỏ
Nếu bạn không làm gì đặc biệt chuyên nghiệp, bạn luôn có thể sử dụng lớp Util. Ví dụ, một lớp sử dụng từ một dự án cho một lớp.
public class Util {
public Util() {}
public boolean flip(boolean bool) { return !bool; }
public void sop(String str) { System.out.println(str); }
}
sau đó chỉ cần tạo một đối tượng Util
Util u = new Util();
và có một cái gì đó cho sự trở lạiSystem.out.println( u.flip(bool) );
Nếu cuối cùng bạn sẽ sử dụng cùng một thứ, hãy sử dụng một phương thức và đặc biệt là nếu nó xuyên suốt các dự án, hãy tạo một lớp Util. Tuy nhiên, tiêu chuẩn công nghiệp là gì. (Lập trình viên có kinh nghiệm cảm thấy tự do để sửa chữa cho tôi)
Các lớp BooleanUtils
hỗ trợ phủ định của một boolean. Bạn tìm thấy lớp này trong commons-lang: commons-lang
BooleanUtils.negate(theBoolean)
Trước:
boolean result = isresult();
if (result) {
result = false;
} else {
result = true;
}
Sau:
boolean result = isresult();
result ^= true;