代码之家  ›  专栏  ›  技术社区  ›  Pawka

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

  •  26
  • Pawka  · 技术社区  · 16 年前

    是的,我知道。问题的长标题。。。所以我有一个字符串中的类名。我以这种方式动态创建该类的对象:

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

    obj 对象我不能这样写:

    MyClass mobj = (MyClass)obj;
    

    …因为 可能会有所不同。

    4 回复  |  直到 8 年前
        1
  •  27
  •   Gavriel Feria    13 年前

    如果不需要,请声明一个接口,该接口声明要调用的方法:

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

    然后你用

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

    MyClass 如果不在您的控制之下,那么您无法使其实现某些接口,另一种选择是依赖反射( see this tutorial ).

        2
  •  86
  •   Lukas Knuth    13 年前

    我认为这是非常直接的思考

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

    如果类名不同

    Object newObj = Class.forName(classname).cast(obj);
    
        3
  •  3
  •   Erich Kitzmueller    16 年前

        4
  •  2
  •   Chii    16 年前

    如果你不知道的话 mojb 是一种 MyClass

    如果MyClass是接口类型或超级类型,则无需执行强制转换。

        5
  •  2
  •   JoseJC    7 年前
    @SuppressWarnings("unchecked")
    private static <T extends Object> T cast(Object obj) {
        return (T) obj;
    }
    
    推荐文章