Использование отражения для создания экземпляра при использовании xmlbeans - PullRequest
1 голос
/ 30 ноября 2010

У меня есть файл xsd, в котором определено более 100 типов. Я сгенерировал Java-код с привязкой xmlbeans, и тогда я могу использовать

MyType.Factory.newInstance();

чтобы получить экземпляр класса. Но так как существует слишком много типов, я решил использовать отражение, чтобы получить экземпляры создания для каждого типа.

Теперь я могу получить класс (интерфейс) MyType, используя

Class clz = Class.forName("com.foo.MyType");

Но понятия не имею, как получить класс Factory, определенный в интерфейсе MyType, а затем получить новый экземпляр.

Любой комментарий или подсказка приветствуется. Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

вы должны использовать двоичное имя для ссылки на внутренние классы: com.foo.MyType $ Factory

1 голос
/ 30 ноября 2010

Итак, у вас есть внутренний класс Factory, объявленный внутри вашего интерфейса MyType? Если у меня есть это право, и если Factory является единственным классом-членом, объявленным MyType, и если я понимаю, что вы ищете, то должно сработать следующее.

clz.getDeclaredClasses( )[0].newInstance( );

Редактировать: Проверил мой ответ, и он работает. Я не знал о технике, упомянутой Пангеей, но она тоже работает, и это лучше, чем мой ответ. Код будет выглядеть так.

Class.forName("MyType$Factory").newInstance( );
...