2015-03-03 22 views
7

Tôi có một lớp là đa điểm, vì vậy tôi biết rằng với một khóa cụ thể, sẽ không bao giờ có hai phiên bản của cùng một lớp tồn tại. Điều này có nghĩa rằng, thay vì:Chú thích một lớp Java là an toàn để so sánh tham chiếu

if (someObject.equals(anotherObject)) 

... nó an toàn cho tôi để làm điều này:

if (someObject == anotherObject) 

Lớp cũng là final, vì vậy tôi biết rằng không có gì liên quan đến đa hình có thể gây rắc rối cho so sánh hoặc.

IDEA thận trọng thông báo cho tôi rằng thật mạo hiểm khi so sánh hai trường hợp trực tiếp và tôi nên sử dụng .equals(), nhưng tôi biết không phải trong trường hợp này. Có một số chú thích tôi có thể áp dụng cho lớp học của mình để hướng dẫn IDEA, và các biên tập viên tiềm năng khác và quan trọng hơn những người dùng khác không, đó là sự so sánh trực tiếp về bình đẳng trong các lớp học của tôi là an toàn?

Tôi biết tôi chỉ có thể nói với IDEA để ngăn chặn cảnh báo, nhưng tôi phải làm điều đó cho mọi so sánh giữa hai loại này hoặc trên toàn cầu, không phải ý tưởng nào là tốt. Ngoài ra, điều quan trọng hơn là tôi cho phép người dùng trong lớp biết rằng nó an toàn, nhanh hơn và thậm chí còn được ưa thích hơn (thuyết phục tôi bằng cách khác) qua số .equals().

+0

Ồ, và tuần tự hóa hoặc các hành vi khác không được áp dụng tại đây. Đối tượng chỉ được xây dựng bởi tôi, không phải ngẫu nhiên thông qua các phương tiện khác như deserialization. Đây là một ứng dụng GWT cũng có nghĩa là bất cứ điều gì liên quan đến đa luồng cũng không áp dụng. – user3466413

+6

Tôi sẽ cố gắng tranh luận về '.equals' ở đây: Nếu bạn chỉ có' ​​.equals' tham chiếu đến bình đẳng tham chiếu, nó nên tối ưu hóa thành '==', và người dùng không phải nhớ rằng một số đối tượng là okay với '==' và một số thì không. Họ chỉ có thể sử dụng '.equals' ở khắp mọi nơi và nó sẽ có hiệu năng tốt như' == '. –

+0

@LouisWasserman Nhưng sau đó bạn phải cẩn thận rằng tài liệu tham khảo của bạn không phải là null. Hoặc ít nhất là bàn tay trái của bạn không phải. – RealSkeptic

Trả lời

1

Kiểm tra IntelliJ có tùy chọn "Bỏ qua" == "giữa các đối tượng thuộc loại chỉ với các nhà xây dựng riêng". Nếu tôi hiểu chính xác, việc bật tùy chọn này sẽ tắt đánh dấu trong trường hợp của bạn.

Hiện tại, không có khả năng nào trong IntelliJ IDEA bỏ qua sự so sánh == dựa trên chú thích.

+0

Cảm ơn bạn đã gửi lời nhắc cấu hình IDEA. Có cách nào cũng thêm một số siêu dữ liệu vào lớp như vậy mà những người sử dụng Eclipse hoặc các biên tập viên khác cũng sẽ biết so sánh là an toàn không? – user3466413

+0

Đối với trình soạn thảo văn bản chung, không có cách nào để thêm bất kỳ siêu dữ liệu nào vào định nghĩa lớp để người dùng của lớp sẽ thấy nó.Đối với Eclipse, tôi không đủ quen thuộc với nó để cho bạn biết bất cứ điều gì cụ thể. – yole

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