NOTA: Questa è una domanda con risposta personale. Potrebbe essere molto semplice, ma ho pensato che sarebbe valsa la pena condividerlo.Qual è il modificatore di accesso del costruttore di una classe anonima?
Supponiamo che io sono una dichiarazione di classe anonima:
MyObject myObj1 = new MyObject() {
};
dove MyObject
è:
class MyObject {
public MyObject() { // explicit public constructor
}
...
}
Da this section del Java Language Specification (sottolineatura mia):
Un anonimo la classe non può avere un costruttore dichiarato esplicitamente. Invece, un costruttore anonimo viene implicitamente dichiarato per una classe anonima.
Se cerco di ottenere il numero di public
costruttori:
// Number of public constructors; prints 0
System.out.println(myObj1.getClass().getConstructors().length);
esso stampa zero come previsto, vale a dire il costruttore anonimo non è public
.
Inoltre non private
, poiché se chiamiamo seguente da una classe differente nella stessa confezione in cui è definita la classe anonima (passando intorno l'istanza myObj1
):
myObj1.getClass().getDeclaredConstructor().newInstance();
compie colpo e IllegalAccessException
.
Qual è il modificatore di accesso del costruttore implicito in una classe anonima?
Cosa ti ha portato a svolgere questa indagine? – dnault
@dnault Mi stavo chiedendo l'uso (concettuale) di una classe anonima come un singleton e ho pensato al costruttore. – manouti
Che differenza fa? Non puoi chiamarlo. – EJP