Как получить экземпляр объекта с неполным именем класса? - PullRequest
3 голосов
/ 01 апреля 2011

мир!Мне нужно создать экземпляр объекта от имени его класса.Я знаю, что это возможно сделать таким образом

MyObject myObject = null;
try {
    Constructor constructor = Class.forName( "fully.qualified.class.name"  ).getConstructor(); // Get the constructor without parameters
    myObject = (MyObject) constructor.newInstance();
} catch (Exception e) {
    e.printStackTrace();
}       

Проблема в том, что имя моего класса не полностью квалифицировано.Есть ли способ получить полное имя, зная только короткое имя?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011
MyObject myObject = null;
for (Package p : Package.getPackages()) {
    try {
        myObject = Class.forName(p.getName() + "." + className).newInstance();
        break;
    } catch (ClassNotFoundException ex) {
        // ignore
    } 
}

Вызов Package.getPackages() даст вам каждый пакет, известный текущим классам ClassLoader и его предкам .

Предупреждение: это будет дорого, потому что вы неоднократно бросаете иловить исключения.Можно ускорить его, протестировав:

this.getClass().getClassLoader().findResource(binaryClassName) != null

перед вызовом Class.forName(...) или эквивалентным ему.

1 голос
/ 01 апреля 2011

Попробуйте это несколько раз для поиска пути пакета. ;)

String[] packages = ...;
String className = ...;
MyObject myObject = null;
for(String p : packages)
  try {
    myObject = Class.forName(p + '.' + className).newInstance();
    break;
  } catch (Exception ignored) {
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...