IntelliJ IDEA でコーディングしています。アプリケーションをデバッグするとき、 Watchesでいくつかのデフォルト メソッドの実装を使用できません。
要約された例を次に示します。
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");
}
}
メソッドではmain()
、ブレークポイントを設定し、3 つのウォッチを設定します。
// Default interface method with dependency
new BasicFriend().sayHiTo(new BasicFriend())
// Default interface method without dependency
new BasicFriend().amountOfHands()
// Class method
new BasicFriend().numberOfFaces()
最初のウォッチは、メソッドが存在しないNoSuchMethodException
という不平をスローします。Friendship$BasicFriend.sayHiTo()
{java.lang.Integer@537} "2"
2 番目のウォッチは正常に実行されますが、不思議なことに、単にプリミティブではなく、ボックス化されたオブジェクトが報告されます
2
。
3 番目のウォッチは、予想どおりプリミティブ 1 を報告します。
最初の時計が機能しないのはなぜですか? これはバグですか?これは実際にIDEに関連していますか?デフォルトメソッドの概念上の欠陥が原因ですか? そもそも私が望むように機能する必要がありますか?2 回目のウォッチの奇妙な結果は、1 回目のウォッチの問題と何らかの関係がありますか?