2012-02-18 36 views
8

Tôi là một lập trình viên mới bắt đầu và tình cờ gặp này trong sách giáo khoa của tôi:Dấu ngoặc đơn xung quanh loại dữ liệu?

public boolean equals(DataElement otherElement) 
{ 
    IntElement temp = (IntElement) otherElement;    
    return (num == temp.num); 
} 

IntElement là một lớp con của DataElement. num là một int lưu trữ một giá trị cho một danh sách liên kết.

Mục đích của (IntElement) sau temp =? Điều gì sẽ sai với IntElement temp = otherElement? Và, nói chung, những gì đặt một kiểu dữ liệu trong ngoặc đơn như vậy làm gì?

Trả lời

8

này được gọi là đúc, xem tại đây:

Về cơ bản, bằng cách làm này:

IntElement temp = (IntElement) otherElement; 

bạn đang nói biên dịch bỏ qua thực tế bạn tuyên bố otherElement như DataElement và tin tưởng bạn rằng nó sẽ là IntElement chứ không phải DataElement hoặc một số phân lớp khác của DataElement.

Bạn không thể làm chỉ IntElement temp = otherElement; như cách này bạn sẽ làm cho otherElement, được định nghĩa là DataElement trở thành một số yếu tố khác, trong trường hợp này IntElement. Đây sẽ là một cú đánh lớn đối với loại an toàn, đó là các loại lý do được xác định ngay từ đầu.

này về mặt kỹ thuật có thể được thực hiện bằng suy luận kiểu:

tuy nhiên Java không hỗ trợ đó và bạn phải rõ ràng.

Nếu nó có thể để có được các yếu tố khác, bạn có thể muốn sử dụng instanceof để kiểm tra thời gian chạy loại trước khi đúc:

  • nhà khai thác/TheinstanceofKeyword.htm "> http://www.java2s.com/Tutorial/Java/0060_Operators/TheinstanceofKeyword.htm

Tại một số điểm sau khi bạn đi qua này, bạn có thể muốn có một cái nhìn tại Generics, quá:

2

Mục đích của (IntElement) sau temp đang thực hiện chuyển đổi loại hình, kỹ thuật hơn, một đúc, nơi bạn đang nói rằng otherElement, mà là một tham số có kiểu DataElement, cần được thực hiện như một đối tượng của cụ thể hơn nhập IntElement.

1

jmein là chính xác, nó cho trình biên dịch/thông dịch viên biến loại biến này thành loại biến khác. Trong thực tế nó chỉ là nói với bộ xử lý để xử lý nó như một loại khác. Trong C đây là một phước lành và một lời nguyền, trong java, những gì trông giống như bạn đang viết, bạn PHẢI đúc biến để xử lý nó một cách khác nhau.

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