当类名已知时,将 Object 类的 java 对象动态转换为给定类

2022-09-01 01:14:11

是的,我明白。长标题的问题...所以我在字符串中有类名。我以这种方式动态创建该类的对象:

String className = "com.package.MyClass";   
Class c = Class.forName(className);
Object obj = c.newInstance();

如何将该 obj 动态转换为 MyClass 对象?我不能这样写:

MyClass mobj = (MyClass)obj;

...因为类名可以不同。


答案 1

我认为它非常直接地反思

MyClass mobj = MyClass.class.cast(obj);

如果类名不同

Object newObj = Class.forName(classname).cast(obj);

答案 2

您不需要,声明一个声明要调用的方法的接口:

public interface MyInterface
{
  void doStuff();
}

public class MyClass implements MyInterface
{
  public void doStuff()
  {
    System.Console.Writeln("done!");
  }
}

然后你使用

MyInterface mobj = (myInterface)obj;
mobj.doStuff();

如果 不受您的控制,则无法使其实现某些接口,另一个选项是依赖反射(请参阅本教程)。MyClass