簡體   English   中英

返回實現接口的對象

[英]Returning objects implementing interfaces

我有一組給定的接口,我必須實現它們。 接口如下:

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%確保簽名得到尊重,我嘗試只留下自動生成的存根進行檢查。 也許我在理論上缺少一些東西,但是如果這種方法不起作用怎么辦?

謝謝

編輯由於此問題已被標記為可能重復,因此我將解釋與它的區別。

那是一個普遍的問題,我在這里有一個非常具體的問題。 我無法訪問這些接口,因為我正在編寫將使用原始接口提交並自動分級的代碼,因此我不會提交任何修改。

知道該問題指出的內容並不能幫助我理解如何擺脫這種情況,因為在給定這些接口的情況下,我需要返回它們的已實現版本,而該問題確實使我不知道如何執行此操作。

編輯2

在評論中,有人指出我的要求不清楚。 我會盡力澄清。

我無法更改接口,我需要確保這是接口問題,並且沒有解決方法。 如果是這樣,我將嘗試與我的教授進行推理。

將您的bar()方法的實現更改為此:

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

您可以填寫設置的something與它實現了任何物體com.something.interfaces.B接口,包括您的實現類com.something.implementations.B

像這樣更改您的界面A:

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

更改接口或實現的名稱以避免混淆

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM