IntelliJ được phỏng đoán chính thức contract của phương pháp của bạn sẽ được này:
null, _ -> false; !null, null -> false
Điều này thực sự có nghĩa là:
Các quy định cụ thể hợp đồng đầu tiên rằng, miễn là tham số đầu tiên là null
, nó sẽ trả về false
. Này được quan sát bởi tuyên bố if
đầu tiên của bạn:
if(needle == null || haystack == null) {
return false;
}
Hợp đồng thứ hai xác định rằng, nếu tham số thứ hai là null
, sau đó nó sẽ trở lại false
. Điều này cũng được chỉ định bởi cùng một tuyên bố if
ở trên.
Đường ruột của tôi cho tôi biết rằng IntelliJ đang gặp khó khăn trong việc hiểu rõ hợp đồng chính thức của vòng lặp là gì, mặc dù nó đơn giản như một điều kiện khác trong biểu thức hợp đồng.
for(Object match : haystack) {
if(match != null && needle.getClass() == match.getClass() && needle.equals(match)) {
return true;
}
}
Hãy xem qua một thời gian ngắn.
- Báo cáo nâng cao sẽ không kích hoạt nếu
haystack
có độ dài 0, do đó, đó là điều cần cân nhắc.
- Các phần tử bên trong mảng có thể là
null
và tôi không hoàn toàn chắc chắn rằng phân tích tĩnh của IntelliJ bao gồm phần đó chưa.
- Chúng tôi đã thiết lập rằng
needle
phải không có giá trị, vì vậy không có gì vi phạm hợp đồng tại dòng đó.
- Nếu chúng tôi có kịch bản trong đó
match != null && needle.getClass() == match.getClass() && needle.equals(match)
là true
, chúng tôi trả lại true
. Nếu không, chúng tôi trả lại false
.
Có nothing that I can see in the formal documentation cung cấp cho chúng tôi cụm từ mà chúng tôi yêu cầu, "hey - chúng tôi đang kiểm tra các thành phần của một mảng!"; có thể là trường hợp phân tích đang vấp ngã trên thực tế là chúng tôi đang trả lại true
bất chấp những gì chúng tôi đã nêu ở trên (kể từ haystack
là không null).
Cho phép tôi nhấn mạnh điểm này:
haystack
phải là phi null
để các bạn tham gia vào các cải tiến-cho. Mã của bạn sẽ không hoạt động nếu không.
Tất cả trong tất cả, tôi sẽ không lo lắng về điều đó. Tốt hơn, hãy nộp một lỗi chống lại nó để loại điều này có thể được cố định hoặc mở rộng theo.
Có bất kỳ chú thích trên phương pháp này? – vikingsteve
@vikingsteve no – jn1kk
Có vẻ như https://youtrack.jetbrains.com/issue/IDEA-136079, được sửa trong 14.1 EAP tại https://confluence.jetbrains.com/display/IDEADEV/IDEA+14.1+EAP –