в чем смысл использования int.class, double.class? - PullRequest
0 голосов
/ 13 февраля 2019

Я понимаю литералы класса и методы getClass(), как они помогают с обобщениями и отражением, но я не понимаю, почему то же самое применимо и к примитивам?

Например, для int, яможно использовать int.class, но не уверен, что вы могли бы сделать с ним.

  1. Вы не можете создать экземпляр с помощью int.class.newInstance(), он выбросит Exception
  2. Вы не можете использовать их с генериками, так как для них требуются не примитивы

Есть идеи?

1 Ответ

0 голосов
/ 13 февраля 2019

Вот пример.Предположим, что у вас есть класс с перегруженными методами для примитивных аргументов;Например,

public class Test {
    public void test(int a) { .... }
    public void test(char a) { .... }
}

Как можно рефлексивно получить объект Method для одного из методов test?Ответ: позвонив (например):

Class<?> testClass = Test.class;
Method method = testClass.getDeclaredMethod("test", int.class);

(обратите внимание, что также можно использовать Integer.TYPE.)


Вы не можете создать экземпляр с помощью int.class.newInstance(), он выдаст Exception

Это потому, что newInstance() возвращает Object, а примитивное значение не может быть объектом.Но также учтите, что:

    SomeType.class.newInstance()

эквивалентно

    new SomeType()

и теперь учтите, что Java не позволит вам использовать new для создания примитивного значения.(И если бы это произошло ... что бы вы ожидали от фактического значения new int?)


Вы не можете использовать их с генериками, так как для них требуются не примитивы.

Это правда, но ортогонально.Вы пишете List<MyClass>, а не List<MyClass.class>.Классовые литералы не обсуждаются.

...