Я могу Инстанцировать класса с помощью объекта класса? Что относительно Конструкторов?

Может быть, если вы напишите так, это будет работать:

import { SomeType } from '...';

declare namespace Express {
  export interface Response {
      getSomeType(): SomeType;
      message(str: string): Response; 
  }
}

Здесь был похожий вопрос

12
задан Eddie 3 April 2009 в 05:50
поделиться

6 ответов

Вы не можете создать новые классы этот путь.

Если у Вас есть название класса, можно использовать Class.forName (имя класса) для загружения/ссыланий класса.

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

1
ответ дан 2 December 2019 в 02:55
поделиться

Можно использовать Class.getConstructors (или Class.getConstructor), чтобы получить список доступных конструкторов и вызвать любого из них с Constructor.newInstance, который действительно принимает параметры.

42
ответ дан 2 December 2019 в 02:55
поделиться

Только для добавления одной точки я вижу пропавших без вести:

Можно вызвать newInstance непосредственно на Class возразите, имеет ли это общедоступного пустого конструктора. (Пустой конструктор является конструктором без аргументов.)

Иначе можно найти конструкторов через Class.getConstructors() поскольку другие сказали.

10
ответ дан 2 December 2019 в 02:55
поделиться

Учебное руководство по Java на отражательных покрытиях это хорошо. Но да, в основном Class.getConstructors, затем Constructor.newInstance - то, где это в.

7
ответ дан 2 December 2019 в 02:55
поделиться

Java разработан так, Вы никогда не можете "обманывать" его, пока Вы используете java.lang/java. классы или другие стандартные библиотеки. Одна из самых важных вещей ООП - то, что объекты должны быть в определенном состоянии, таким образом можно быть в безопасности, что конструктор всегда выполняется. Даже если Вы пользуетесь некоторыми странно выглядящими отражательными библиотеками, чтобы сделать Вашу работу.

Так, с помощью Class.forName ("меня. Тест") .newInstance (); (или подобный), под капотом вызовет Test () конструктор для Вас.

Если Вы хотите вызвать другого конструктора, код - что-то как:

Test test = (Test)Class.forName("Test").getConstructor(String.class).newInstance("Hello World");

Здесь getConstructor спрашивает, на что конструктор похож (он хочет строку), и затем Вы называете его со строкой.

2
ответ дан 2 December 2019 в 02:55
поделиться

Если у Вас есть список Class объекты получили через литералы класса, Вы могли бы также статически сослаться на конструкторов вместо того, чтобы проскользнуть в злое отражение.

1
ответ дан 2 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: