Foo.класс что он делает?

Я смотрю на некоторый код Java, и есть этот код, который я часто вижу.

Foo.class

это используется для указания типа класса? заключается в том, что подобный

Foo.GetType();
typeof(Foo);

в C# ?

для чего он используется ? и что это значит?

2 ответов


да Foo.class в Java эквивалентно typeof(Foo) в C#. См.раздел 15.8.2 JLS подробнее о литералы класс.

Это не то же самое, что вызов GetType() по ссылке, которая получает срок исполнения тип объекта. Эквивалент Java этого является someReference.getClass().

одна из причин, по которой Вы можете видеть его чаще в коде Java, чем в C#, связана с дженериками. Это не совсем необычно есть что-то вроде:

public class Generic<T>
{
    private final Class<T> clazz;

    public Generic(Class<T> clazz)
    {
        this.clazz = clazz;
    }
}

Это позволяет доступу исполнени-времени к классу для отражения etc. Это необходимо только в Java из-за стирания типа, в результате чего объект универсального типа обычно не может определить свои аргументы типа во время выполнения.


в java есть специальный класс под названием класс . он наследует объект. его экземпляр представляет классы и интерфейсы в Java runtime, а также представляет enum、array、primitive Java types(boolean, byte, char, short, int, long, float, double)и ключевое слово пустота. когда класс загружен или метод defineClass() загрузчика классов вызывается JVM, JVM создает объект класса.

Java позволяет нам создать соответствующий Объект класса во многом, и.класс-один из них. например,

Class c1 = String.class;