Дополнительно
Java Reflection: Создание реализующего класса
Class someInterface = Class.fromName("some.package.SomeInterface");
Как мне теперь создать новый класс, реализующий someInterface
?
Мне нужно создать новый класс и передать его в функцию, которой нужен SomeInterface
в качестве аргумента.
67
4
Легко,
Ява.яз.отразить.Доверенности
на помощь!Полный рабочий пример:
Создать нечто, претендующее на реализацию интерфейса на лету, на самом деле не так уж сложно. Вы можете использовать
java.lang.reflect.Proxy
после реализацииInvocationHandler
для обработки любых вызовов методов.Конечно, вы можете создать настоящий класс с помощью библиотеки типа BCEL.
Если это делается в тестовых целях, то вам следует обратить внимание на такие мокинг-фреймворки, как jMock и EasyMock.
Если вы хотите выйти за рамки интерфейсов, вам стоит обратить внимание на cglib и objenesis. Вместе они позволят вам делать довольно мощные вещи, расширяя абстрактный класс и инстанцируя его. (jMock использует их для этой цели, например).
Если вы хотите придерживаться интерфейсов, делайте то, что сказал Джон Скит :).
На самом деле, вы должны использовать имя класса в методе Class.fromName() и привести его к типу вашего интерфейса. Посмотрите, поможет ли вам приведенный ниже пример.