public class KV<K, V> {
public K key;
public V value;
public KV(K key, V value) {
this.key = key;
this.value = value;
}
}
Tôi đang cố gắng cấu trúc lại biến lớp value
, điều này xảy ra tại chỗ. Điều đó có nghĩa là không có hộp thoại nào bật lên; Tôi nhấn enter và nó cố gắng tái cấu trúc lại toàn bộ dự án, bao gồm cả nhận xét và những gì không, bao gồm:
<%--<link href="<c:url value="../core/core.css" />" />--%>
trong tệp .jsp. Đó là cách quá "thông minh" khi cố gắng cấu trúc lại các bình luận phù hợp trên toàn bộ dự án. Điều này thường gây ra nhiều rủi ro lỗi và việc tái cấu trúc trong môi trường Java không còn an toàn nữa.
Điều tương tự cũng xảy ra trong Intellij 12. Thực sự mà nói, tôi không cần Intellij khuyến nghị bất cứ điều gì được coi là không an toàn, hoặc khi không chắc nó là điều tương tự!
Tôi có thể loại trừ việc tái cấu trúc nhưng tôi không có thời gian để đánh giá năm "đề xuất" mỗi lần. Nó chỉ làm tăng khả năng xảy ra lỗi của con người: hầu hết thời gian tôi chỉ nhấn enter, và rất tiếc mọi thứ đã được cấu trúc lại.
Tái cấu trúc cũng là một vấn đề lớn trong môi trường Java khi nó đôi khi cố gắng thay thế mọi thứ trong tệp .js. Nghiêm túc mà nói, điều này phải dừng lại.
Nếu không có hộp thoại bật lên, tôi không thể bỏ chọn "chuỗi tìm kiếm". Ngay cả khi điều đó được đánh dấu, Intellij sẽ không bao giờ bao gồm các đề xuất theo mặc định, đặc biệt là khi nó nằm ngoài tệp hiện tại. Nó cũng có thể khuyên bạn nên cấu trúc lại chúng, nhưng chúng nên được loại trừ theo mặc định. Đó là, nó phải là một tính năng chọn tham gia, thay vì theo mặc định phá hủy mọi thứ.
Đây là một vấn đề nghiêm trọng về trải nghiệm người dùng với cái gọi là tái cấu trúc Intellij "thông minh" gần đây. Khi cấu trúc lại các tệp JS, tôi không muốn tìm kiếm các tệp Java cho các nhận xét hoặc chuỗi! Giai đoạn = Stage! Và ngược lại!
An toàn là trên hết! Các nhà phát triển biết họ đang làm gì sẽ tự tìm kiếm các chuỗi nếu cần. Trong một môi trường ngôn ngữ động, nó khiến Intellij không thể sử dụng được, bởi vì thường xuyên và không có bất kỳ khuôn mẫu rõ ràng nào, đôi khi việc tái cấu trúc được thực hiện, đôi khi nó thay đổi mọi thứ trong dự án và những thứ không.
Nên có một tùy chọn có nội dung "refactor chỉ liên quan đến tệp này hoặc khi được suy ra 100%!", Đặc biệt là đối với các ngôn ngữ động! Đối với các ngôn ngữ tĩnh, nó thậm chí không nên cố gắng tìm kiếm các nhận xét và chuỗi bên ngoài tệp.
Tôi không có ý định đưa nó ra công khai, nhưng tôi đã nêu vấn đề này hơn 2 năm trước trong bugtracker, nhưng không ai để ý đến.
BIÊN TẬP
Đối với những người trong số các bạn nghĩ rằng tôi có thể sẽ tiến xa, tôi chỉ thử điều này:
Với lớp này:
public class KV<K, V> {
public K key;
public V val;
public KV(K key, V val) {
this.key = key;
this.val = val;
}
}
Và thêm nó vào bất kỳ lớp Java nào , chẳng hạn:
public class CoreConfig {
String abc = "kv.val";
String def = "somethingElse.val";
}
Khi cấu trúc lại KV.val
như trước đây, tôi nhận được các đề xuất sau, một ENTER khỏi thảm họa và một số thứ tôi phải đánh giá và loại trừ từng cái một. Nó cần nỗ lực và vừa phiền phức vừa rủi ro. Giống như ai đó hét lên, DỪNG LẠI! Và rồi ooh, không có gì sau một phút, sự thất vọng và một bài luận dài 1000 từ (cái này).
Nghiêm túc mà nói, có cách nào để vô hiệu hóa loại hành vi nguy hiểm này không !? Và có lý do gì khiến điều này được bật theo mặc định không ??
CHỈNH SỬA 20200706
Điều tồi tệ tiếp tục xảy ra vào năm 2020: https://youtrack.jetbrains.com/issue/IDEA-245370