Класс [] - Что это значит? - PullRequest
4 голосов
/ 05 марта 2011

Я смотрю учебник, найденный на: http://www.ibm.com/developerworks/library/j-dyn0603/

В частности, есть раздел, в котором приводится следующий пример:

Class[] types = new Class[] { String.class, String.class };
Constructor cons = TwoString.class.getConstructor(types);
Object[] args = new Object[] { "a", "b" };
TwoString ts = (TwoString)cons.newInstance(args);

Я не совсем понимаючто представляет класс [].То, как я это читаю, говорит о «массиве объектов Class, называемых типами».Я также несколько незнаком с синтаксисом, используемым в новых утверждениях - как работает новый Class [] {String.class, String.class}?

Если кто-то может помочь мне разобраться с этим, я был бы признателенэто.

Ответы [ 7 ]

3 голосов
/ 05 марта 2011

Да, буквальный смысл - это именно то, о чем вы думаете

Class[] types = new Class[] { String.class, String.class }; - это объявление и инициализация в одну строку. В нем говорится, что создайте массив, содержащий объекты типа Class, и инициализируйте его двумя объектами типа Class, а именно String.class и String.class.

Подобный пример будет

int[] nums = new int[]{1,2,3};

или

float[] decimals = new float[]{1.2, 3.1, 5.2}
1 голос
/ 05 марта 2011

A Class - это Object, который описывает класс Java (или интерфейс). Class[] - это массив этих объектов.

Синтаксис <ClassName>.class (например, String.class) возвращает Class для определенного Java-класса (или интерфейса).

Новый массив может быть создан через несколько синтаксисов. new Class[i] создает новый массив Class длиной i и заполненный значениями по умолчанию (нулевые ссылки). new Class[]{a, b, c} создает новый массив Class, содержащий заданные элементы a, b и c. Его длина равна 3, потому что было дано 3 элемента.

1 голос
/ 05 марта 2011

Это массив типа Class

new Class[] {...}

Создает и массив типа Class, содержимое которого указано внутри.

В общем

Тип [] означает «массив ...», как вы и думали.

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

Вероятно, вам не следует переходить на расширенные функции, такие как отражение, не зная сначалаосновы.

1 голос
/ 05 марта 2011

Это массив объектов, которые имеют супер тип Class.

В Java все является Object. Это означает, что если вы хотите знать о типах классов в коде, вам нужно создать Object, который может инкапсулировать детали класса. Java называет это Object a Class.

Обратите внимание на заглавные буквы и имейте в виду, что, поскольку Class является Object, вы можете вызывать все Object методы класса, такие как x.getClass(), x.wait() и x.hashcode().

Class[] items = { String.class, Integer.class };

означает создание массива с именем items, который содержит Class объектов. Инициализируйте массив с Object s, представляющими класс String и класс Integer.

Поскольку Class объекты представляют типы классов, часто оба они взаимозаменяемо используются в неформальной речи.

0 голосов
/ 05 марта 2011

Я не уверен, что это то, что вы ищете, но Class[] в примере имитирует конструктор в этом классе TwoString. Для меня было бы яснее, если бы они использовали два разных типа. Так что, если класс TwoString выглядит так:

public class TwoString {

    private String m_s1;
    private Integer m_s2;
    public TwoString(String s1, Integer s2) {
        m_s1 = s1;
        m_s2 = s2;
    }


}

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

Class[] types = new Class[] { String.class, Integer.class };
Constructor cons = TwoString.class.getConstructor(types);
Object[] args = new Object[] { "a", 1 };
TwoString ts = (TwoString)cons.newInstance(args);

Итак, массив классов должен настроить конструктор для использования. Последовательность шагов:

  1. Массив классов определяет, какой конструктор использовать.
  2. Тогда вы найдете конструктор.
  3. Вы задаете, какие значения передавать в конструктор.
  4. Затем вы вызываете конструктор для создания экземпляра.
0 голосов
/ 05 марта 2011

Class - это класс Java, который представляет ... класс и связанные с ним метаданные. поэтому Class[] - это массив Class объектов.

У каждого класса в java есть статическая переменная-член с именем class типа Class, и вот что вы делаете:

  1. создание класса [], содержащего два члены, каждый из которых является объектом Тип Class и, в частности, Class представляющий java.lang.String
  2. глядя через отражение ссылка на конструктор в класс TwoString, который занимает два java.lang.String objects => TwoString (String, String)
  3. создание массива объектов для подачи в конструктор со значениями "а" и "б"
  4. наконец вы создаете экземпляр TwoString TS, вызывая конструктор, вы посмотрели в (б) и аргументы, которые вы инициализировали в (с)

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

TwoString ts = new TwoString("a","b");

но способ, которым вы отправили сообщение, использует Reflection / Introspection.

0 голосов
/ 05 марта 2011
  1. Class на самом деле является классом с именем, хм .. Class.

    Экземпляры класса Class представляют классы и интерфейсы в работающем приложении Java.

  2. new Class[] работает.Он инициализирует массив ссылок на классы.Но, как обычно с объектными массивами, ссылки являются нулевыми.

  3. Класс Class не имеет открытого конструктора.Так что нельзя сказать new Class()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...