En contextos estáticos, ¿cómo es que no puede llamar a una versión estática de getClass()
(en lugar de tener que usar my.package.name.MyClassName.class
)?¿Por qué no está disponible getClass() como método estático?
¿No es el compilador lo suficientemente inteligente como para determinar cuándo usar métodos de objetos + cuándo usar métodos estáticos?
para mayor claridad NOTA:
no estoy diciendo que un static getClass()
debe usarse en lugar del método no estático getClass()
(que es bastante obvio - si SpecialFoo
es una subclase de Foo
, entonces el getClass()
de un Foo
podría devolver Foo.class
o SpecialFoo.class
o algo más y debe determinarse en tiempo de ejecución).
Estoy diciendo que me pregunto por qué no hay dos versiones de getClass()
, que es un método estático que sólo se aplica en un contexto estático, y el método no estático normal getClass()
. Si no es posible, entonces no es posible, y esa es la respuesta. Si es posible, pero no se ha hecho, entonces es una opción histórica, y tal vez haya una buena razón para ello. Eso es lo que me gustaría saber.
Sería muy bueno para declarar
final static Logger logger = LoggerFactory.getLogger(getClass());
en lugar de
final static Logger logger = LoggerFactory.getLogger(my.package.name.MyClass.class);
en el que el primero podría ser copiado textualmente de una clase a la siguiente, mientras que el segundo se requiere para copiar el nombre de la clase en cada archivo.
Buena pregunta. Groovy permite 'this' hacer referencia a la * clase actual * en un contexto estático ;-) –
Probablemente porque en el tiempo de ejecución los métodos estáticos no tienen ningún contexto de clase. – halfdan
Correcto, pero desde el punto de vista del compilador, cuando llamas a un método estático 'foo()', sabe que 'foo()' se refiere al método estático. Supongo que lo que estoy preguntando es por qué no hay un método estático 'getClass()' que devuelve el campo '.class' estático incorporado. –