目前正在开发一种机制,允许对使用Prevayler库序列化的对象进行反序列化。例如:
我老了.jar与班级:
class A {
public B b;
public B getB() {
return b;
}
}
class B {
public int c;
public int getC() {
return c;
}
}
现在我需要某种迁移,因为类“B”中的“c”需要被转换为例如String。
我正在使用自定义类加载器来加载类和方法:
// 1. make List of URLs to pass to CustomClassLoader class
URL url = new URL(PATH_TO_JAR);
List<URL> urls = new ArrayList<URL>();
urls.add(url);
// 2. Use CustomLoaderClass, to make sure, that loaded classes/methods are not from current project,
// but from the jar specified in URL, since Java class loaders (including URLClassLoader)
// first ask to load classes from their parent class loader.
CustomClassLoader clsLoader = new CustomClassLoader(urls);
java.lang.Class cls = clsLoader.loadClass("A");
// String.class in methods second parametr means, that we should pass String to that method
Method method = cls.getMethod("getB");
// 3. invoke method which returns Object instead "B"
Object obj = method.invoke(null);
我和B班有类似的做法。 如何将Object obj转换为“B”,以便我可以从B类调用方法getC?
答案 0 :(得分:1)
您无法动态指定赋值运算符左侧的类型。至少我知道没办法那样做。您需要首先检查它是否为B类型,然后显式地将其转换为B.请记住,obj变量的类型为Object,但它引用的对象是B,因此getClass()应该返回B.当您调用时方法,Object类型的obj参数是您要调用方法的对象。如果所讨论的方法是静态的,则它只能为null。否则,您需要指定要在其上调用方法的A类实例。