Java 如何从类名创建类对象并将其用于方法重载 为了解释问题,我认为有6个类 一级 二班 三班 四班 第五班 ClassImpl
我有一个方法Java 如何从类名创建类对象并将其用于方法重载 为了解释问题,我认为有6个类 一级 二班 三班 四班 第五班 ClassImpl,java,reflection,Java,Reflection,我有一个方法startoOperation(List classNameList),在这个方法中,我迭代classNameList,对于每个类名,我使用反射来获取该类的对象,现在我想调用方法doOperation(),这是一个重载方法 private void doOperation(ClassOne objClassOne) { //Do somethig } private void doOperation(ClassTwo objClassTwo) { //Do some
startoOperation(List classNameList)
,在这个方法中,我迭代classNameList
,对于每个类名,我使用反射来获取该类的对象,现在我想调用方法doOperation()
,这是一个重载方法
private void doOperation(ClassOne objClassOne) {
//Do somethig
}
private void doOperation(ClassTwo objClassTwo) {
//Do somethig
}
.. And so on up to
private void doOperation(ClassFive objClassFive) {
//Do somethig
}
我的startOperation
方法如下所示:
public void startOperation(List<string> classNameList) {
for (String string : classNameList) {
Class actualClass = Class.forName(className);
Object classObj = actualClass.newInstance();
doOperation(classObj); // here I am getting problem
}
}
公共作废开始操作(列表类名称列表){
for(字符串:classNameList){
Class actualClass=Class.forName(className);
Object classObj=actualClass.newInstance();
doOperation(classObj);//我遇到了问题
}
}
请说明如何从循环中调用重载方法
注意:
classNameList
动态包含不同类的名称,我不想硬编码任何东西,因为有些类可能会被添加到项目中,有些可能会被删除。发生这种情况时,我只想添加或删除相应的doOperation
方法。您可以使用反射:
for (String string : classNameList) {
Class actualClass = Class.forName(className);
Object classObj = actualClass.newInstance();
Method doOp = this.getClass().getDeclaredMethod("doOperation", actualClass);
doOp.setAccessible(true);
doOp.invoke(this, classObj);
}
一种方法是对
classObj
的类型检查进行硬编码:
private void doOperation(final Object objClass)
{
if(objClass instanceof ClassOne)
doOperation((ClassOne)o);
else if(objClass instanceof ClassTwo)
doOperation((ClassTwo)o);
else if(objClass instanceof ClassThree)
doOperation((ClassThree)o);
else if(objClass instanceof ClassFour)
doOperation((ClassFour)o);
else if(objClass instanceof ClassFive)
doOperation((ClassFive)o);
}
由于您已经对doOperation
的重载进行了硬编码,我想这个解决方案可以适合您的实现
另一种方法是使用反射调用适当的方法:
public void startOperation(List<String> classNameList)
{
for (String string : classNameList)
{
Class actualClass = Class.forName(className);
Object classObj = actualClass.newInstance();
Method doOperation = ClassImpl.class.getDeclaredMethod("doOperation", actualClass);
doOperation.setAccessible(true);//doOperation is private, we need to bypass that
doOperation.invoke(this, classObj);
}
}
公共作废开始操作(列表类名称列表)
{
for(字符串:classNameList)
{
Class actualClass=Class.forName(className);
Object classObj=actualClass.newInstance();
方法doOperation=ClassImpl.class.getDeclaredMethod(“doOperation”,actualClass);
setAccessible(true);//doOperation是私有的,我们需要绕过它
调用(this,classObj);
}
}
您遇到了什么问题?请告诉我们您遇到的具体错误,因为没有这样的方法例外我猜无法像这样检索私有方法,因为我已经使用这个.getClass().getMethods()进行了检查,它返回了所有公共方法method doOperation=ClassImpl.class.getDeclaredMethod(“doOperation”,actualClass); 此时获取错误NoSuchMethod,因此doOperation.setAccessible(true);未被执行是类ClassImpl
的一部分吗?