Ich versuche, ein Objekt mit Reflexion wie diese zu schaffen (vielleicht ist dies keine gute Architektur, aber ich bin gerade dabei einige Tests)Erstellen Sie ein Objekt durch Reflexion
package com.interfaces;
public interface IEmployee {
List<entities.Employee> getEmployees();
}
dann
package com.personnel;
public class Employee implements IEmployee{
public Employee(){}
public List<entities.Employee> getEmployees(){
...
}
}
dann in einer anderen Klasse
package com.factory;
import java.lang.reflect.Constructor;
public final class EmployeeFactory {
private static String path = "com.personnel";
public EmployeeFactory() {}
public static interfaces.IEmployee CreateEmployee(){
String className = path + ".Employee";
try {
Class<?> cls = Class.forName(className);
Object object = cls.newInstance();
return (interfaces.IEmployee)object;
} catch (Exception e) {
System.out.println(e.getMessage());
return null;
}
}
}
dann in einer anderen Klasse
public final class PersonnelService {
private static interfaces.IEmployee employeeFactory = com.factory.EmployeeFactory.CreateEmployee();
public List<entities.Employee> getEmployees(){
return employeeFactory.getEmployees();
}
}
schließlich in meinem Haupt-Methode
public static void main(String[] args) {
List<entities.Employee> employees = new com.services.PersonnelService().getEmployees();
for(entities.Employee employee : employees){
System.out.println(employee.getEmployeeName());
}
, wenn der Code der Klasse cls ankommt = Class.forName (classname) wirft die Ausnahmemeldung „com.personnel.Employee. (Java.lang.String) "mit" NoSuchMethodException ".
UPDATE
fand ich das Problem. In der Tat war es eine schlechte Namenskonvention. Ich hatte eine serialisierbare Employee-Klasse (mein Pojo) und eine Employee-Klasse, die meine Schnittstelle IEmployee implementiert, die DB-Operationen ausführen soll. Ich habe das letzte als EmployeeDAL umbenannt und es hat funktioniert. Sogar ich habe den vollständigen Klassennamen definiert, wie Sie im Beispiel sehen können, es sieht so aus, als ob ich versucht habe, meinen serialisierbaren Pojo zu instantiieren (ich verstehe es immer noch nicht, aber ...). Vielen Dank für Ihre Zeit.
Basierend auf der Fehlermeldung ändern würde es irgendwie scheinen. (Java.lang.String) mit classname immer hinzugefügt, aber ich kann nicht sehen, wie. Ist das alles dein relevanter Code? – Natecat
Ja, ist es. Im Wesentlichen enthält die Variable className den String, der von der Ausnahme zurückgegeben wird: «com.personnel.Employee». Die drei Perioden sind db connect, um meine Angestellten zu bekommen, aber ich kann nicht dorthin gelangen. –
Hier fehlt etwas. 'NoSuchMethodException' ist eine geprüfte Ausnahme, aber Sie haben keine Methode angezeigt, die sie möglicherweise auslösen könnte. –