Вопрос

Из Учебник по Java:

Наконец, существует также особый вид литералов, называемый литерал класса, сформированный путем взятия имени типа и добавления ".class";например, String.class.Это относится к объекту (типа Class), который представляет сам тип.

Какому типу переменной можно присвоить этот литерал?

Если можно, приведите небольшой пример.

Это было полезно?

Решение

Class<String> c = String.class;

Проверьте Javadoc для java.lang.Class посмотреть, что можно сделать с одним из этих малышей – в основном это связано с размышлениями

Другие советы

Чтобы это понять, нужно понять это Нить является экземпляром (объектом) класса Сорт.Строковый литерал (например.«Я — строка») — обозначение, представляющее экземпляр (объект) класса. Нить, тогда как литерал класса (например.Hashtable.class) — это нотация, представляющая экземпляр класса. Сорт.

Благодаря другим хорошим ответам здесь вы знаете, что это такое, но вот типичный пример использования, который также может прояснить ситуацию:

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

Как следует из кода, это строка, в которой мы инициализируем структуру журналирования (в этом примере я использую org.apache.log4j пакет, но этот принцип распространяется и на другие фреймворки).А getLogger() методу требуется литерал класса, чтобы он знал, что он регистрирует (т.текущий класс объекта).

В соответствии с JLS

15.8.2 Литералы классов

Литерал класса — это выражение, состоящее из имени класса, интерфейса, массива или примитивного типа, за которым следует . и токен class.Тип литерала класса: Class.Он возвращает объект Class для именованного типа (или для void), как определено определяющим загрузчиком классов класса текущего экземпляра.

Некоторые общие применения можно найти в Литералы классов как токены типа времени выполнения.

Сам литерал MyClass.Если ты напишешь MyClass.class вы получаете ссылку на объект класса.Если ты напишешь new MyClass(), он использует литерал, чтобы получить экземпляр объекта класса, который вы получаете MyClass.class.Из экземпляра вы получаете тот же объект класса, вызвав myClassInstance.getClass().

Я не уверен на 100%, но сам литерал нельзя присвоить какой-либо переменной.Что вы можете сделать, так это получить имя класса в виде строки и использовать структуру отражения для создания экземпляра.

В примерах это примерно так:

Class myClass = MyClass.class

или

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

Чтобы это понять, нужно понять это String является instance (object) своего superclass (parent class) Object.

class String's instance (object)значение - это String literal (например. "I am a string.") :

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

тогда как class Object's instance (object)значение - это Class literal — (напр. Hashtable.class), что относится к class Hashtable's instance (object)

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

Когда JVM загружает классы вашего приложения, она сохраняет их как java.class.Class объекты.

Итак, обычно существует несколько экземпляров типа Class в памяти, которая представляет ваши классы.Итак, вы можете сделать что-то вроде этого:

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
package training;

import java.lang.reflect.Method;

public class Training {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Class<Training> myclass = Training.class;
        Method[] myclassarr = myclass.getDeclaredMethods();
        System.out.println(myclass);
        System.out.println(myclass.getName());
        for (int i = 0; i < myclassarr.length; i++) {
            System.out.println(myclassarr[i]);
        }
        System.out.println();
        Class<String> strobj = String.class;
        System.out.println(strobj);
        System.out.println(strobj.getName());
        Method[] strobjarr = strobj.getDeclaredMethods();
        for (int j = 0; j < strobjarr.length; j++) {
            System.out.println(strobjarr[j]);
        }
    }

    public void MethodA() {

    }

    public static void MethodB() {

    }
}

Выход:

class training.Training
training.Training
public static void training.Training.main(java.lang.String[])
public void training.Training.MethodA()
public static void training.Training.MethodB()

class java.lang.String
java.lang.String
public boolean java.lang.String.equals(java.lang.Object)
public java.lang.String java.lang.String.toString()
public int java.lang.String.hashCode()
public int java.lang.String.compareTo(java.lang.String)
public int java.lang.String.compareTo(java.lang.Object)
public int java.lang.String.indexOf(java.lang.String,int)
public int java.lang.String.indexOf(java.lang.String)
public int java.lang.String.indexOf(int,int)
public int java.lang.String.indexOf(int)
static int java.lang.String.indexOf(char[],int,int,char[],int,int,int)
static int java.lang.String.indexOf(char[],int,int,java.lang.String,int)
public static java.lang.String java.lang.String.valueOf(int)
public static java.lang.String java.lang.String.valueOf(long)
public static java.lang.String java.lang.String.valueOf(float)
public static java.lang.String java.lang.String.valueOf(boolean)
public static java.lang.String java.lang.String.valueOf(char[])
public static java.lang.String java.lang.String.valueOf(char[],int,int)
public static java.lang.String java.lang.String.valueOf(java.lang.Object)
public static java.lang.String java.lang.String.valueOf(char)
public static java.lang.String java.lang.String.valueOf(double)
public char java.lang.String.charAt(int)
private static void java.lang.String.checkBounds(byte[],int,int)
public int java.lang.String.codePointAt(int)
public int java.lang.String.codePointBefore(int)
public int java.lang.String.codePointCount(int,int)
public int java.lang.String.compareToIgnoreCase(java.lang.String)
public java.lang.String java.lang.String.concat(java.lang.String)
public boolean java.lang.String.contains(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.CharSequence)
public boolean java.lang.String.contentEquals(java.lang.StringBuffer)
public static java.lang.String java.lang.String.copyValueOf(char[])
public static java.lang.String java.lang.String.copyValueOf(char[],int,int)
public boolean java.lang.String.endsWith(java.lang.String)
public boolean java.lang.String.equalsIgnoreCase(java.lang.String)
public static java.lang.String java.lang.String.format(java.util.Locale,java.lang.String,java.lang.Object[])
public static java.lang.String java.lang.String.format(java.lang.String,java.lang.Object[])
public void java.lang.String.getBytes(int,int,byte[],int)
public byte[] java.lang.String.getBytes(java.nio.charset.Charset)
public byte[] java.lang.String.getBytes(java.lang.String) throws java.io.UnsupportedEncodingException
public byte[] java.lang.String.getBytes()
public void java.lang.String.getChars(int,int,char[],int)
void java.lang.String.getChars(char[],int)
private int java.lang.String.indexOfSupplementary(int,int)
public native java.lang.String java.lang.String.intern()
public boolean java.lang.String.isEmpty()
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.CharSequence[])
public static java.lang.String java.lang.String.join(java.lang.CharSequence,java.lang.Iterable)
public int java.lang.String.lastIndexOf(int)
public int java.lang.String.lastIndexOf(java.lang.String)
static int java.lang.String.lastIndexOf(char[],int,int,java.lang.String,int)
public int java.lang.String.lastIndexOf(java.lang.String,int)
public int java.lang.String.lastIndexOf(int,int)
static int java.lang.String.lastIndexOf(char[],int,int,char[],int,int,int)
private int java.lang.String.lastIndexOfSupplementary(int,int)
public int java.lang.String.length()
public boolean java.lang.String.matches(java.lang.String)
private boolean java.lang.String.nonSyncContentEquals(java.lang.AbstractStringBuilder)
public int java.lang.String.offsetByCodePoints(int,int)
public boolean java.lang.String.regionMatches(int,java.lang.String,int,int)
public boolean java.lang.String.regionMatches(boolean,int,java.lang.String,int,int)
public java.lang.String java.lang.String.replace(char,char)
public java.lang.String java.lang.String.replace(java.lang.CharSequence,java.lang.CharSequence)
public java.lang.String java.lang.String.replaceAll(java.lang.String,java.lang.String)
public java.lang.String java.lang.String.replaceFirst(java.lang.String,java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String)
public java.lang.String[] java.lang.String.split(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String,int)
public boolean java.lang.String.startsWith(java.lang.String)
public java.lang.CharSequence java.lang.String.subSequence(int,int)
public java.lang.String java.lang.String.substring(int)
public java.lang.String java.lang.String.substring(int,int)
public char[] java.lang.String.toCharArray()
public java.lang.String java.lang.String.toLowerCase(java.util.Locale)
public java.lang.String java.lang.String.toLowerCase()
public java.lang.String java.lang.String.toUpperCase()
public java.lang.String java.lang.String.toUpperCase(java.util.Locale)
public java.lang.String java.lang.String.trim()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top