返回实现接口的对象



我有一组给定的接口,我必须实现它们。接口如下:

package com.something.interfaces;
public interface A {
    void foo();
    Set<B> bar();
}
package com.something.interfaces;
public interface B {
    void foobar();
}

我的实现如下:

package com.something.implementations;
public class A implements com.something.interfaces.A {
    @Override 
    public void foo(){
        //Something
    }
    @Override
    public Set<com.something.interfaces.B> bar(){
        Set<com.something.implementations.B> something = new HashSet<com.something.implementations.B>();
        //...
        return something;
    }
}
package com.something.implementations;
public class B implements com.something.interfaces.B {
    @override
    public void foobar(){
        //Something
    }
}

问题在实现类的方法bar()中。它给了我错误:

Type mismatch: cannot convert from java.util.Set<com.something.interfaces.B> to java.util.Set<com.something.implementations.B>

我100%确定签名是尊重的,我尝试仅离开自动生成的存根进行检查。也许我在理论上缺少一些东西,但是如果这不起作用,我该如何实现该方法?

谢谢

编辑由于这个问题已被标记为可能的重复,因此我将解释与之的区别。

那是一个通用的问题,我在这里有一个非常具体的问题。我无法访问接口,因为我正在编写将使用原始接口提交和自动化的代码,我不会提交任何修改。

知道该问题指出了什么并没有帮助我了解如何摆脱这种情况,因为鉴于这些界面,我需要返回它们的实施版本,而这个问题确实没有任何关于如何做到这一点的线索。

edit2

在评论中,已经指出我的要求尚不清楚。我会尝试澄清。

我无法更改接口,我需要确保这是接口的问题,并且对此没有解决方法。如果是这种情况,我将尝试与我的教授推理。

将您对bar()方法的实现更改为:

@Override
public Set<com.something.interfaces.B> bar(){
    Set<com.something.interfaces.B> something = new HashSet<com.something.interfaces.B>();
    //...
    return something;
}

您可以用任何实现com.something.interfaces.B接口的对象填充something中的集合,包括您的实现类com.something.implementations.B

像这样更改界面:

public interface A {
    void foo();
    Set<com.something.interfaces.B> bar();
}

更改接口或实现的名称以避免混乱

最新更新