Tôi đang mã hóa trong IntelliJ IDEA. Khi gỡ lỗi ứng dụng của tôi, tôi không thể sử dụng một số triển khai phương pháp mặc định trong Đồng hồ.Trình gỡ lỗi Java không thể gọi một số phương pháp triển khai mặc định
Dưới đây là một ví dụ đặc:
public class Friendship {
interface Friend {
default void sayHiTo(Friend friend) {
System.out.println("Hi, " + friend.hashCode());
}
default int amountOfHands() {
return 2;
}
}
public static class BasicFriend implements Friend {
int numberOfFaces() {
return 1;
}
}
public static void main(String[] args) {
System.out.println("Put a breakpoint here");
}
}
Trong main()
phương pháp tôi đặt một breakpoint và thiết lập ba đồng hồ:
// Default interface method with dependency
new BasicFriend().sayHiTo(new BasicFriend())
// Default interface method without dependency
new BasicFriend().amountOfHands()
// Class method
new BasicFriend().numberOfFaces()
Chiếc đồng hồ đầu tiên ném NoSuchMethodException
phàn nàn rằng phương pháp Friendship$BasicFriend.sayHiTo()
không tồn tại .
Đồng hồ thứ hai chạy thành công, nhưng kỳ lạ nó báo cáo một đối tượng được đóng hộp {[email protected]} "2"
thay vì chỉ nguyên thủy 2
.
Đồng hồ thứ ba báo cáo số nguyên thủy 1, đúng như mong đợi.
Tại sao đồng hồ đầu tiên không hoạt động? Đây có phải là một lỗi? Đây thực sự là IDE liên quan? Có phải vì một số lỗ hổng khái niệm về các phương thức mặc định không? Tôi có nên làm việc như tôi muốn ngay từ đầu không? Kết quả kỳ lạ của chiếc đồng hồ thứ hai có liên quan gì đến vấn đề trong chiếc đồng hồ đầu tiên không?
Sau khi đọc lại câu hỏi của bạn, tôi nhận được như vậy ngoại trừ chiếc đồng hồ đầu tiên của bạn. Trong đồng hồ đầu tiên của bạn, tôi nhận được 'java.lang.ClassCastException: com.sun.tools.jdi.InterfaceTypeImpl không thể được cast thành com.sun.tools.jdi.ClassTypeImpl'. Tôi đoán đây chỉ là lỗi trình biên dịch IntelliJ. Tôi đang sử dụng IntelliJ 14.1.2 trên Ubuntu. – mkobit