Một số ngày trước, chúng tôi đã chuyển sang Java 7 trong Công ty của tôi - cuối cùng! Jay \ o/Vì vậy, tôi đã tìm hiểu về lớp học Objects
và đã ngạc nhiên khi các phương pháp hashCode()
và equals()
được nhận ra, giảm rất nhiều mã boylerplate so với những cái được tạo ra bởi nhật thực mỗi mặc định (ALT + SHIFT + S -> H).Làm thế nào để dạy eclipse để tạo nhỏ gọn bằng() và hashCode() từ lớp jdk 7 Objects?
Tôi đã tự hỏi liệu tôi có thể thay đổi hành vi mặc định của nhật thực được tạo ra hashCode()
và equals()
không?
Tôi rất muốn thấy điều này:
@Override
public int hashCode()
{
return Objects.hash(one, two, three, four/*, ...*/);
}
thay vì điều này:
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + ((one == null) ? 0 : one.hashCode());
result = prime * result + ((two == null) ? 0 : two.hashCode());
result = prime * result + ((three == null) ? 0 : three.hashCode());
result = prime * result + ((four== null) ? 0 : four.hashCode());
// ...
return result;
}
Cũng vậy với equals()
. This is the article Tôi nhận được từ này.
Bất kỳ ý tưởng nào để nhận ra điều này tốt nhất?
Đối với "Generate toString()" người ta có thể xác định một mẫu trên trang Wizzard. Bạn nên nộp một vé tại [eclipse-bugzilla] (https://bugs.eclipse.org/bugs/) có lẽ họ thêm một cái gì đó tương tự cho eq + hashcode trong tương lai. Nếu bạn làm như vậy xin vui lòng giống như vé, vì vậy tất cả mọi người quan tâm có thể upvote nó! – Chriss
Bạn cũng có thể gấp hàm 'hashCode()' nếu bạn không muốn thấy nó. Tôi nghĩ rằng có thể là một ý tưởng tốt để xem xét liệu việc triển khai mặc định có phải là những gì bạn muốn trong tất cả các trường hợp có thể xảy ra trong tương lai hay không. Theo mặc định cho biểu thức viết tắt, bạn sẽ cho phép bạn linh hoạt trong việc tinh chỉnh 'hashCode' (không thể đảo ngược tất nhiên), nếu bạn muốn/cần làm như vậy. Xem http://stackoverflow.com/questions/12076846/using-a-larger-prime-as-a-multiplier-when-overriding-hashcode để thảo luận về hàm băm. – posdef
Tôi đã đăng nhập tăng cường này. Bình chọn cho nó! https://bugs.eclipse.org/bugs/show_bug.cgi?id=424214 –