如何将接口转换为类?

时间:2011-04-06 18:03:45

标签: java class interface groovy casting

我有一个接口 Class 对象作为方法参数提供,我还有一个对象的 Object 实例/ strong>被铸造。

任务:转换对象,就像我将使用Class.cast()方法手动执行interface = object事件一样。

该节目的明星:

def readObject(type, path) {
        Object obj
        // Prevent playing with NPE
        if (groovyClassLoader == null)
            groovyClassLoader = new GroovyClassLoader(getClass().getClassLoader())

        // The final quest begins
        try {
            Class groovyClass = groovyClassLoader.parseClass(new File(path))

// at this point: type ins an instance of Class which is an interface
// to which I need to assign the obj instance

// groovyClass is an instance of Class 
// out of which I need to get object and eventually cast it to type
// so something like:
//            groovyClass = groovyClass.cast(type)
//            obj = groovyClass.newInstance()
// or
//            obj = groovyClass.newInstance()
//            obj = groovyClass.cast(type)



            obj = groovyClass.newInstance()
            obj = type.cast(obj)

        } catch (ex){
            //TODO:IO and obj creation exception should be logged
            ex.printStackTrace()
        }
        return obj
    }

这是对法师施法的强大追求生存,我开始担心我的任务是出于强大的土地可能性XD

2 个答案:

答案 0 :(得分:3)

您无法创建界面实例。您必须首先定义实现接口的类,然后创建该类的实例。然后,您可以将此对象作为参数传递给任何接受接口类型参数的方法。

答案 1 :(得分:3)

您不能拥有接口的实例。界面就像一个模板。实现接口的具体类可以有自己的实例。假设我有以下内容:

public interface IExample {
  public void foo();
}

class Example implements IExample {
  public void foo() {
    // do something
  }
}

class MyMain {
  public static void main(String[] args) {
    IExample iExample;
    Example example = new Example();

    iExample = example; // Polymorphism :)

    // IExample iExample = new IExample();  -- is wrong
  }
}

在上面的例子中,对象“example”可以转换为IExample(Polymorphism)但你不能为IExample接口分配内存,因为它什么都不做。