Ho appena rilevato un comportamento. Ho inizialmente pensato che fosse un errore in Eclipse. Considera questa semplice classe:Perché la mia classe non può implementare un'interfaccia dichiarata al suo interno?
public class Foo {
public static interface Callback {
public void onAction();
}
}
Questo è perfettamente valido. Tuttavia, questo non è:
public class Foo implements Callback {
public static interface Callback {
public void onAction();
}
public void onAction() { /*some implementation*/ }
}
Ma questo è valido anche:
public class Foo {
public static interface Callback {
public void onAction();
}
private final Callback mCallback = new Callback() {
public void onAction() { /*some implementation*/ }
};
}
Perché Java costringermi a sorta di 'rifiuti' membro per esso, se potesse semplicemente salvarlo permettendomi di implementare questo stesso? Sono ben consapevole della "soluzione" per mettere questa interfaccia nel proprio file, ma per curiosità: c'è una ragione per cui questo non funzionerà?
AFAIK, non si può fare un nuovo su un'interfaccia, quindi il nuovo Callback() non è valido –
Non sono sicuro della motivazione ufficiale per questo non funziona, ma non vedo alcun motivo per cui si vorrebbe avere una classe implementa un'interfaccia che contiene - perché non dovresti semplicemente definire la classe con i metodi che stai cercando di inserire nell'interfaccia? Perché vuoi un'interfaccia in questo caso? – iamnotmaynard
@MiguelPrz sta creando un'implementazione dell'interfaccia inline usando '{}' – Miquel