클래스 이름과 메서드 이름이 String 매개 변수로 호출자에게 전달 될 때 특정 메서드를 실행하는 프로그램을 만들려고합니다. 아래의 코드를 고려하십시오.클래스 이름과 메서드 이름을 매개 변수로 전달하여 Java 메서드를 실행하십시오.
runTheMehod("CarBean","getColor");
이 runTheMethod의 구현은 다음과 같이 될 것이다 :
public runTheMethod(String className, String methodName){
try {
Object carObj = Class.forName(className).newInstance();
//What to do now???
} catch (InstantiationException | IllegalAccessException
| ClassNotFoundException e) {
e.printStackTrace();
}
}
내가 할 수있는
public class CarBean {
private String brand;
private String color;
/**
* @return the brand
*/
public String getBrand() {
return brand;
}
/**
* @param the brand to set
*/
public void setBrand(String brand) {
this.brand= brand;
}
/**
* @return the color
*/
public String getColor() {
return color;
}
/**
* @param the color to set
*/
public void setColor(String color) {
this.color= color;
}
}
가 지금은 아래와 같은 방법을 통해이 작업을 실행하려면 : 나는 클래스 CarBean이 클래스 이름을 사용하여 객체를 가져옵니다. 이제 CarBean 객체에 캐스팅해야하고 메소드를 실행할 수 있습니다. 따라서 런타임시 클래스 이름으로 캐스팅하는 방법이 각 호출마다 다를지 궁금합니다. 또한 호출하기 전에 클래스에 특정 메서드가 있는지 여부를 확인할 수 있습니까?
문제에 대한 제안 사항에 감사드립니다. 또한, 나는 이것을하기위한 더 나은 접근법이 있는지를 아는 모든 귀입니다.
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getMethod % 28java.lang.String, % 20java.lang.Class ... % 29, https://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Method.html#invoke%28java .lang.Object, % 20java.lang.Object ... % 29 –
그 유형의 새로운 객체를 인스턴스화 하시겠습니까? 예 : 'runTheMethod (Object instance, String methodName)'도 작동 할 것이고 그 타입의 객체를 만들기 위해 당신에게 맡길 것입니다. – zapl
@zapl 예 문자열 형식의 클래스 이름을 얻고 있습니다. –