Sto codificando in IntelliJ IDEA. Durante il debug della mia applicazione, non posso utilizzare alcune implementazioni del metodo predefinito in Orologi.Il debugger Java non può chiamare alcune implementazioni del metodo predefinito
Ecco un esempio condensata:
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");
}
}
In main()
metodo ho messo un punto di interruzione e impostare tre orologi:
// Default interface method with dependency
new BasicFriend().sayHiTo(new BasicFriend())
// Default interface method without dependency
new BasicFriend().amountOfHands()
// Class method
new BasicFriend().numberOfFaces()
Il primo orologio tiri NoSuchMethodException
lamentando che il metodo Friendship$BasicFriend.sayHiTo()
non esiste .
Il secondo orologio funziona correttamente, ma stranamente riporta un oggetto in scatola {[email protected]} "2"
anziché solo un primitivo 2
.
Il terzo orologio riporta un primitivo 1, proprio come previsto.
Perché il primo orologio non funziona? è un insetto? Questo è effettivamente collegato all'IDE? È a causa di qualche difetto concettuale dei metodi predefiniti? Dovrebbe funzionare come lo voglio in primo luogo? Lo strano risultato del secondo orologio è in qualche modo collegato al problema nel primo orologio?
Dopo aver riletto la tua domanda, ottengo la stessa eccezione per il tuo primo orologio. Nel tuo primo orologio ricevo 'java.lang.ClassCastException: com.sun.tools.jdi.InterfaceTypeImpl non può essere lanciato su com.sun.tools.jdi.ClassTypeImpl'. Sto indovinando che questo è solo un bug del compilatore IntelliJ. Sto usando IntelliJ 14.1.2 su Ubuntu. – mkobit