2012-04-15 56 views
8

Chúng ta có thể sửa đổi một giá trị Boolean trong hàm lớp trong java, một cái gì đó như thế này sẽ không hoạt động khi thay đổi cục bộ hoạt động. Làm thế nào chúng ta có thể thực hiện thay đổi sau đây thông qua biến phản ánh bên ngoài cuộc gọi phương thức?Thay đổi giá trị boolean trong hàm lớp trong java

public void changeboolean(Boolean b) 
{ 
     if(somecondition) 
     { 
       b=true; 
     } 
     else 
     { 
       b=false; 
     } 
} 

EDIT Mã này có thể là như thế này:

public String changeboolean(Boolean b,int show) 
{ 
     if(somecondition) 
     { 
       b=true; 
       show=1; 
       return "verify again"; 
     } 
     else 
     { 
       b=false; 
       show=2; 
       return "Logout"; 
     } 
     show=3; 
     return verifed; 

} 

tôi đang tìm kiếm một cái gì đó như thế này

b.setvalue(true); 

Có thể?

+1

Tại sao bạn không trả lại boolean thay thế? – Mat

+0

Tại sao bạn không chỉ làm cho phương thức trả về giá trị boolean mới? –

+1

Ai đó cần đọc một cuốn sách Java. –

Trả lời

18

Chúng ta có thể sửa đổi một giá trị Boolean chức năng lớp trong java

Không, Boolean là không thay đổi, giống như tất cả những gói cho các loại nguyên thủy.

Options:

  • Return một boolean từ phương pháp của bạn (lựa chọn tốt nhất)
  • Tạo một tương đương có thể thay đổi các Boolean cho phép bạn thiết lập giá trị nhúng. Sau đó, bạn cần phải sửa đổi giá trị trong ví dụ mà thông số đề cập đến - thay đổi giá trị của thông số để tham chiếu đến một cá thể khác sẽ không giúp bạn, bởi vì đối số luôn được chuyển bởi giá trị trong Java. Giá trị đó là giá trị nguyên thủy hoặc tham chiếu, nhưng vẫn là được chuyển bởi giá trị. Thay đổi giá trị của tham số không bao giờ thay đổi biến số của người gọi.
  • Sử dụng một boolean[] với một yếu tố duy nhất như các loại wrapper
  • Sử dụng AtomicBoolean như các loại wrapper
+4

Đối với tất cả những người lười biếng muốn làm # 2, có * ho * [AtomicBoolean] (http://docs.oracle.com/javase /1.5.0/docs/api/java/util/concurrent/atomic/AtomicBoolean.html) có sẵn trong JDK (hey tôi đã không nói rằng đó là một ý tưởng tốt;)). – Voo

+2

Một thủ thuật phổ biến khác là chấp nhận một 'boolean []' có chiều dài 1 và đặt 'mảng [0] = kết quả'. –

+1

Bí quyết về mảng được Louis nhắc đến có lẽ là cách tốt nhất để thực hiện điều này. Tình huống xuất hiện khi bạn cần thay đổi * nhiều giá trị boolean, vì vậy "chỉ trả lại giá trị mới" là không đủ (Java, thật đáng buồn, không thể đối phó với ý tưởng trả lại nhiều giá trị từ một hàm). Mảng luôn luôn có thể thay đổi, và trong khi thiết kế này không mở rộng tốt, nó hoàn toàn tốt cho các thói quen được sử dụng trong một khu vực, ẩn khỏi xem. –

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