Динамично преобразовывающий объект Java Класса объекта к данному классу, когда имя класса известно

Да, я знаю. Длинный заголовок вопроса... Таким образом, у меня есть имя класса в строке. Я динамично создаю объект того класса таким образом:

String className = "com.package.MyClass";   
Class c = Class.forName(className);
Object obj = c.newInstance();

Как я могу динамично преобразовать это obj в объект MyClass? Я не могу записать этот путь:

MyClass mobj = (MyClass)obj;

... потому что имя класса может отличаться.

29
задан Loom 31 January 2018 в 08:20
поделиться

3 ответа

вы этого не сделаете, объявите интерфейс, который объявляет методы, которые вы хотите вызывать:

public interface MyInterface
{
  void doStuff();
}

public class MyClass implements MyInterface
{
  public void doStuff()
  {
    System.Console.Writeln("done!");
  }
}

, тогда вы используете

MyInterface mobj = (myInterface)obj;
mobj.doStuff();

Если MyClass не находится под вашим контролем тогда вы не сможете заставить его реализовать какой-то интерфейс, а другой вариант - полагаться на отражение ( см. этот учебник ).

23
ответ дан 28 November 2019 в 00:42
поделиться

Вам не нужно преобразовывать объект в объект MyClass, потому что он уже есть. Если вы действительно хотите преобразовать его, но поскольку имя класса неизвестно во время компиляции, вы не можете этого сделать, поскольку вы не можете объявить переменную этого класса. Я предполагаю, что вы хотите / нуждаетесь в чем-то вроде «утиного ввода», то есть вы не знаете имя класса, но знаете имя метода во время компиляции. Интерфейсы, предложенные Грегори, лучше всего подходят для этого.

3
ответ дан 28 November 2019 в 00:42
поделиться

Если вы не знали, что mojb имеет тип MyClass , то как вы можете создать эту переменную?

Если MyClass является типом интерфейса , или супертип, то выполнять приведение не нужно.

2
ответ дан 28 November 2019 в 00:42
поделиться
Другие вопросы по тегам:

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