Непонятно, что вы делаете в своем коде.
Похоже, сначала вы объявляете c1
, то есть java.lang.String
без его использования .. затем вы загружаете новый java.lang.Object
, просматриваете его объявленные методы и выбираете первый найденный как writeout
, и вы попытайтесь вызвать его, даже не зная, что вы называете.
Чтобы сделать то, что вы пытались объяснить, я предлагаю вам:
Определите интерфейс, такой как Invokable
, с методом, который вы хотите вызывать динамически, например
interface Invokable {
public void invokeMe();
}
Затем, когда вы генерируете новый класс, загружая имя, вы можете привести его к своему интерфейсу и вызывать этот метод, не сходя с ума:
Class<?> class = Class.forName("your.YourClass");
Object target = class.newInstance();
if (target instanceof Invokable)
((Invokable)target).invokeMe();
(конечно, YourClass
потребуется реализовать интерфейс Invokable
)
Этот подход четко определяет, что программа сможет создавать экземпляры динамически и что вам разрешено делать с этими объектами, не беспокоясь о поиске методов или допуская странные вещи ..