我有一个接口 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
答案 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接口分配内存,因为它什么都不做。