2009-09-08 17 views
6

Tôi không thể tìm kiếm | trong Google. Nếu bạn đã tìm thấy nó trong một mã nguồn phần mềm mà bạn đang cố gắng giải thích, bạn không biết nó làm gì và bạn không thể nhờ người khác giúp đỡ, làm thế nào bạn sẽ tìm ra nó?"|" trong "int style = SWT.APPLICATION_MODAL | SWT.OK;" làm (và làm thế nào để Google nó)?

+0

Bạn không thể google, nhưng bạn sẽ có thể tìm thấy nó trong chỉ mục JLS. –

+0

xem http://stackoverflow.com/questions/47981 –

+0

@shsimsimulator: Tại sao thêm thẻ c và C++, khi chúng hoàn toàn không liên quan đến câu hỏi? Nếu bạn muốn nhấn vào câu hỏi, ít nhất hãy sử dụng các thẻ phong nha. –

Trả lời

30

Toán tử đường ống trong trường hợp này có nghĩa là "sử dụng cả SWT.APPLICATION_MODAL và SWT.OK làm tùy chọn/cờ cho hộp bật lên của tôi". Nó là một thành ngữ rất thường được sử dụng với các định danh cấu hình bitfield, đặc biệt. trong các hệ thống cửa sổ như SWT hoặc Win32.

Làm thế nào nó hoạt động

Các ống (|) điều hành là bitwise OR, nghĩa là nó sẽ tính toán một hoạt động OR của hai giá trị số nguyên nhị phân. Nếu bạn kiểm tra nơi APPLICATION_MODAL và OK được định nghĩa, bạn sẽ thấy họ là một cái gì đó như thế này:

... 
SWT.OK = 1,     // 00000001 in binary 
SWT.ABORT_RETRY_IGNORE = 2, // 00000010 in binary 
SWT.OK_CANCEL = 4;   // 00000100 in binary 
... 
SWT.APPLICATION_MODAL = 32; // 00100000 in binary 
... (and so on...) 

Khi bạn Bitwise OR hai (hoặc nhiều hơn) của những con số này với nhau, bit riêng lẻ sẽ được thiết lập cho mỗi người trong số các tùy chọn:

int style = SWT.OK | SWT.APPLICATION_MODAL = 00000001 | 00100000 = 00100001 

Bộ công cụ cửa sổ mà đi để giải thích phong cách sẽ có thể cho biết chính xác những gì bạn muốn (một hộp bật lên đó là phương thức và có một nút OK) bằng cách thực hiện một phép toán AND như thế này:

... 
if(style & SWT.OK) 
{ 
    // we want an OK box 
} 
if(style & SWT.ABORT_RETRY_IGNORE) 
{ 
    // we want an Abort/Retry/Ignore box 
} 
if(style & SWT.OK_CANCEL) 
{ 
    // we want an OK/Cancel box 
} 
... 
if(style & SWT.APPLICATION_MODAL) 
{ 
    // We want a modal box 
} 
... 

Kinda thông minh, theo quan điểm khiêm tốn của tôi. Nó cho phép bạn chọn/đại diện cho nhiều tùy chọn cấu hình trong một biến duy nhất. Bí quyết nằm trong định nghĩa số nguyên của các tùy chọn và đảm bảo rằng chúng chỉ là các quyền hạn của 2.

+0

Câu trả lời rất chi tiết. +1 – MitMaro

+0

Bạn cũng có thể muốn so sánh câu trả lời này để biết thêm thông tin: http://stackoverflow.com/questions/276706/what-are-bitwise-operators/276771#276771 –

+1

Điều này rất phổ biến trong C và C++, nhưng tôi 'tò mò (như một người chưa thực hiện nhiều Java) là liệu nó có thành ngữ trong Java để sử dụng một số nguyên như một tập hợp các cờ boolean không? – caf

1

| là toán tử OR. Hai giá trị đó có thể là các cờ được gắn với 1 bit và giá trị kết quả là giá trị kiểu để sử dụng.

0

Bitwise OR.

Với hầu hết mọi thứ, có một chút đường cong học tập. Nếu tôi đang học một ngôn ngữ mới, tôi sẽ giả định rằng | là một toán tử và sẽ tìm kiếm 'các toán tử Java'.

2

Đây là một bitwise OR, nó cung cấp phương tiện để bạn chuyển một số cờ cho thành phần SWT dưới dạng một int đơn, thay vì phải nạp quá nhiều loại với các phương thức setter.

Hai thuộc tính bạn liệt kê cho biết bạn có một hộp thoại hoặc cửa sổ khác sẽ được hiển thị một cách bình thường trên vỏ mẹ và sử dụng nút ok. Bạn có thể kết hợp nó với SWT.CANCEL để hiển thị nút OK và Hủy, ví dụ

11

Để trả lời câu hỏi của bạn về việc tìm hiểu nó, tôi sẽ tự hỏi mình có phải là biểu tượng hay người điều hành không. Điều đó một mình giúp tôi tìm ra những gì để tìm kiếm trong Google. Các loại biến được sử dụng cũng cung cấp cho tôi một đầu mối - đó là một toán tử đang làm việc trên các loại int.

Hy vọng điều đó sẽ hữu ích.

+0

cảm ơn bạn đã đọc phần mà hầu hết mọi người bỏ qua !!! –

+0

cảm ơn vì đã cho tôi biết bạn đánh giá cao điều đó! Dường như có rất nhiều người đăng bài nhanh chóng vì họ muốn trở thành người đầu tiên trả lời và nhận điểm nhanh chóng ... oh well. – weiji

0

Sử dụng một công cụ tìm kiếm có thể xử lý nó: A | B

+0

Hoặc một công cụ tìm kiếm không trả lời câu hỏi. OP muốn biết ý nghĩa của nó * trong Java *. Không phải trong toán học nói chung. – jalf

+2

@jalf, hãy thư giãn. – rodrigoap

2

Rất tiếc, Google là tệ hại tại các biểu tượng.Thay vào đó, tôi muốn bắt đầu bằng cách nhìn vào the Wikipedia page, và tìm kiếm trên đó cho "|", mà là tại địa chỉ:

và trang có một tổng quan khá tốt về những gì là gì và làm thế nào để sử dụng nó.

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