Cast对象没有实现接口?

时间:2015-11-18 12:19:54

标签: java

首先我知道这是非常肮脏的工作,如果有办法,可能会考虑"不良做法"。不幸的是,我必须探索这种可能性。

我想知道我是否可以构建一个在实践中实现接口但实际上没有的对象。我的意思是,该类实现了所有方法,但没有"实现接口"在声明中。另外,我更喜欢这样做,最后得到Object类型。以下示例

interface IA{
void method();
}

class CB{

    void method(){;}

}

public class foo{
    public static void main(String[] args){
    /*magic to cast the object without exception*/
    IA ob= (IA) new CB(); 
    ob.method(); 
    }
}

我想在最后得到这个IA对象。

4 个答案:

答案 0 :(得分:6)

考虑一个更安全的替代方案。

将要转换的对象包装到实现接口的类中,并将方法调用委托给包装对象。

示例:

public class CBWrapper implements IA {
    CB target;

    public CBWrapper(CB target) {
        this.target = target;
    }


    @Override
    void method() {
        target.method();
    }
}

答案 1 :(得分:3)

你不能将一个Object转换为它没有实现的接口。

您可以使用反射访问对象的方法,并按名称或其他方式调用特定方法。

但是,我认为你应该问问自己你想做什么,有没有更简单的方法。

答案 2 :(得分:0)

如何使用implements关键字获取IS-A关系?

  

implements关键字由类继承自接口使用。   接口永远不能被类扩展。

答案 3 :(得分:0)

您无法从界面创建对象,因为在Java界面中没有构造函数。

更好的方法是使用更柔和的替代方案。