这是一段 java 代码,我们假设 org.abc.Test
是一个接口(interface)。
for (Object obj : objectArray[]) {
if (obj instanceof org.abc.Test) {
((org.abc.Test)obj).someMethod();
}
}
现在假设类org.abc.Test
作为String
动态传递,代码可能是这样的:
String className = "org.abc.Test";
Class<?> clazz = Class.forName(className);
for ( Object obj : objectArray[]) {
if (clazz.inInstance(obj)) {
obj = clazz.cast(obj);
obj.someMethod();
}
}
很遗憾,语句obj.someMethod();
无法通过编译,因为编译器不知道转换后对象的具体类。
所以我认为应该使用这样的语句:
Class<? extends org.abc.Test> clazz;
有人可以帮忙解决这个问题吗?我只是 Java 反射机制的新手。
顺便说一句,我发现 obj = clazz.cast(obj);
不是正确的方法...
最佳答案
这是行不通的,因为 obj
对编译器来说仍然只是一个 Object
,即使在 obj = clazz.cast(obj);
之后也是如此>。您需要像@Peggy 提到的那样进行显式转换:((org.abc.Test)obj).someMethod();
如果您想让它真正动态,您可以执行以下操作:
if (clazz.isInstance(obj)) {
clazz.getMethod("someMethod").invoke(obj);
}
在这种情况下你甚至不需要强制转换。
关于java - 将对象动态转换为特定类以使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31477061/