Ancora e ancora mi trovo in situazioni in cui voglio fare questo:
class Outer
{
private static final Runnable Inner = new Runnable()
{
private static final String CONSTANT1 = "foo";
private static final int CONSTANT2 = CONSTANT1.length(); //'static' gives error
private static final int CONSTANT3 = f(); //'static' gives error
private static int f() //'static' gives error
{
return CONSTANT1.length();
}
@Override public void run() {}
};
private static final String CONSTANT1 = "foo";
private static final int CONSTANT2 = CONSTANT1.length(); //this is fine!
private static final int CONSTANT3 = f(); //this is fine!
private static int f() //this is fine!
{
return CONSTANT1.length();
}
}
Nell'editor dell'IDE (IntelliJ IDEA) l'errore legge "Le classi interne non possono avere dichiarazioni statiche", che è fuorviante, perché se fosse così, allora CONSTANT1
avrebbe anche un errore, ma non .
Al di fuori dell'editor, il compilatore riporta l'errore come segue: java: Illegal static declaration in inner class <anonymous bla bla bla> modifier 'static' is only allowed in constant variable declarations
.
Quindi qualcuno conosce le ragioni tecniche alla base di questa limitazione imposta dal compilatore java? Perché il modificatore 'statico' è consentito solo nelle dichiarazioni di variabili costanti in istanze di classi anonime? Qual è la difficoltà nel consentire "statico" in questi casi?