newInstance () с внутренними классами
Я работал над методом создания экземпляров, который позволит мне упаковать множество похожих классов в один внешний класс. Затем я мог бы создать экземпляр каждого уникального типа класса, передав имя этого типа в конструктор. После многих исследований и ошибок, это то, что я придумал. Я оставил ошибку, чтобы продемонстрировать свой вопрос.
import java.lang.reflect.Constructor;
public class NewTest
{
public static void main(String[] args)
{
try
{
Class toRun = Class.forName("NewTest$" + args[0]);
toRun.getConstructor().newInstance();
}
catch(Exception ex)
{
ex.printStackTrace();
System.out.println(ex.getMessage());
}
}
public NewTest(){}
private class one //Does not instantiate
{
public one()
{
System.out.println("Test1");
}
}
private static class two //Instantiates okay
{
public two()
{
System.out.println("Test2");
}
}
}
Компиляция этого кода и запускjava NewTest two
результаты на выходеTest2
, как я и предполагал.
Бегjava NewTest one
результаты в
java.lang.NoSuchMethodException: NewTest$one.<init>()
at java.lang.Class.getConstructor(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
at NewTest.main(NewTest.java:12)
Я запутался в этом, потому что, насколько мне известно, я правильно ссылаюсь на внутренний класс, внешний класс должен иметь доступ к внутреннему классу, и у меня по умолчанию нет конструктора arg.