C'è una spiegazione perfetta a Java Lambda FAQ.
Ecco una citazione di What about the diamond problem? articolo c'è:
interface A {
void m() default { ... }
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}
Nel caso iniziale (il codice precedente), l'attuazione di m ereditato da D è inequivocabilmente quello definito A - non c'è altra possibilità. Se la situazione viene modificata in modo che B dichiari anche un'implementazione predefinita di m, diventa l'implementazione che D eredita dalla regola di "implementazione più specifica".Ma se entrambi B e C fornire implementazioni di default, allora il conflitto, e D deve usare sia la sintassi X.super.m (...) di scegliere in modo esplicito uno di essi, oppure la ridichiarare metodo stesso, ignorando tutte le dichiarazioni dei supertipi.
Assicuratevi di controllare l'articolo precedente sulle regole di risoluzione delle dichiarazioni di metodo in conflitto e di altri articoli sul progetto Java Lambda: sono abbastanza buone.
fonte
2013-05-28 09:18:12
Ho l'impressione che tu possa rispondere alla maggior parte delle tue domande semplicemente provandolo. –
Esatto :) In realtà non sono riuscito a trovare la risposta su come è stato gestito il problema dei diamanti. Quindi l'ho provato io stesso. – Alex