variable tipos assignment array java literals

tipos - variable java oracle



¿Qué es un literal de clase en Java? (9)

Desde el tutorial de Java :

Finalmente, también hay un tipo especial de literal llamado literal de clase , formado por un nombre de tipo y anexando " .class "; por ejemplo, String.class . Esto se refiere al objeto (de tipo Class ) que representa el tipo en sí.

¿A qué tipo de variable se puede asignar este literal?

Por favor dé un pequeño ejemplo si es posible.



Cuando la JVM carga sus clases de aplicación, las almacena con objetos java.class.Class . Por lo tanto, generalmente hay varias instancias de tipo Class en memoria que representa sus clases. Entonces puedes hacer algo como esto:

Class<Bicycle> bicycleClass = Bicycle.class; // returns the object storing your Bicycle class bicycleClass.getName(); // returns your class name bicycleClass.getDeclaredMethods(); // returns your (declared) class methods


De acuerdo con el JLS

15.8.2 Literales de clase

Un literal de clase es una expresión que consiste en el nombre de una clase, interfaz, matriz o tipo primitivo seguido de a . y la class token. El tipo de un literal de clase es Class . Evalúa el objeto Class para el tipo nombrado (o para void ) según lo definido por el cargador de clase definidora de la clase de la instancia actual.


El literal en sí es MyClass . Si escribe MyClass.class obtendrá una referencia al objeto de clase. Si escribe new MyClass() , usa el literal para obtener una instancia del objeto de clase que obtiene MyClass.class . Desde la instancia, obtienes el mismo objeto de clase llamando a myClassInstance.getClass() .

No estoy 100% seguro, pero el literal en sí no puede asignarse a ninguna variable. Lo que puede hacer es obtener el nombre de la clase como cadena y usar el marco de reflexión para crear una instancia.


En ejemplos, es algo así:

Class myClass = MyClass.class

o

MyClass.class.getResourceAsStream("config.properties");


Gracias a las otras buenas respuestas aquí, usted sabe de qué se trata, pero aquí hay un ejemplo de uso típico que también puede aclarar:

private static Logger log = Logger.getLogger(YourClassHere.class);

Como sugiere el código, esta es una línea en la que estamos inicializando un marco de trabajo de registro (en este ejemplo, estoy usando el paquete org.apache.log4j , pero el principio se extiende a otros marcos). El método getLogger() requiere un literal de clase para que sepa qué es el registro (es decir, la clase del objeto actual).


Para comprender eso, debes entender que String es una instance (object) de su superclass (parent class) Object .

El valor de la instance (object) class String instance (object) es un String literal (por ejemplo, "I am a string." ):

class | instance (object) | literal ------------------------------------------------ String | instance_name = | "I am a string."

mientras que el valor de la instance (object) class Object instance (object) es un Class literal - (por ejemplo, Hashtable.class ) que se refiere a la instance (object) class Hashtable

class | instance (object) | literal ------------------------------------------------ Hashtable | instance_name | Hashtable.


Para comprender eso, debes entender que String es una instancia (objeto) de la clase Class . Un literal de cadena (por ejemplo, "I am a string") es una notación que representa una instancia (objeto) de la clase String , mientras que un literal de clase (por ejemplo, Hashtable.class) es una notación que representa una instancia de la clase Class .


Class<String> c = String.class;

Eche un vistazo al Javadoc para java.lang.Class para ver qué puede hacer con uno de estos tipos pequeños, principalmente relacionado con la reflexión