我想这是不可能的,但我想知道:
您能否将符合特定接口(interface)方法的类(但不使用“实现接口(interface)”)转换为该接口(interface)?
有什么解决方法吗?我想为某个类使用包装类,但无法访问它的构造函数,也无法修改需要该类的接收代码。
-编辑- 对不起,我不清楚界面。实际上是那些将两条思路融合到一个问题中的问题。我应该询问有关将一个类(class)转换为另一个类(class)的问题。
最佳答案
简短的回答是否定的。系统怎么可能知道?这充其量只是巧合。
现在就解决方法而言,反射是您的 friend 。 Oracle tutorial
示例代码:
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Member;
import static java.lang.System.out;
enum ClassMember { CONSTRUCTOR, FIELD, METHOD, CLASS, ALL }
public class ClassSpy {
public static void main(String... args) {
try {
Class<?> c = Class.forName(args[0]);
out.format("Class:%n %s%n%n", c.getCanonicalName());
Package p = c.getPackage();
out.format("Package:%n %s%n%n",
(p != null ? p.getName() : "-- No Package --"));
for (int i = 1; i < args.length; i++) {
switch (ClassMember.valueOf(args[i])) {
case CONSTRUCTOR:
printMembers(c.getConstructors(), "Constructor");
break;
case FIELD:
printMembers(c.getFields(), "Fields");
break;
case METHOD:
printMembers(c.getMethods(), "Methods");
break;
case CLASS:
printClasses(c);
break;
case ALL:
printMembers(c.getConstructors(), "Constuctors");
printMembers(c.getFields(), "Fields");
printMembers(c.getMethods(), "Methods");
printClasses(c);
break;
default:
assert false;
}
}
// production code should handle these exceptions more gracefully
} catch (ClassNotFoundException x) {
x.printStackTrace();
}
}
关于Java 转换 : can you force a cast to a interface if it's not declared in the to be casted class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267621/