java - 如何在java中实现接口(interface)的类中添加 protected 方法?

标签 java interface wrapper

我有一个名为 Property 的类,它除了 get 方法之外什么也没有。当创建 Property 的新实例时,将设置所有字段。 Property 实现了一个名为 IProperty 的接口(interface)。

由于我使用的库中存在一些错误,我必须在创建 Property 实例后重新设置其名称。因此,建议创建一个 WrapperProperty 类,该类将提供一个公共(public) setName 方法,该方法本身调用因此创建的 setName() 方法属性,这将是 protected /包 View 。

问题是我无法在 Property 中保护此方法,因为 Eclipse 告诉我将其添加到接口(interface) IProperty 中并将其公开。

有什么解决办法吗?

WrapperI属性:

public class WrapperIProperty {

    private IProperty prop;

    WrapperIProperty(Property prop) {
        this.prop = prop;
    }

    public void setName(String name) {
        prop.setName(name);
    }
}

属性:

public class Property implements IProperty {

    String name;

    protected void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
    public int getFoobar() {
        return 123;
    }
    public int getWhatever() {
        return 987;
    }
}

I属性:

public interface IProperty {

    public int getWhatever();
    public int getFoobar();
    public String getName();

}

这就是目前的情况。显然它不起作用,因为我不能让该方法在 Property 类中受到保护。因此我最好以某种方式摆脱界面条目。但如何呢?

最佳答案

您可能想要做的是单独保留 IProperty 接口(interface)(不要向其中添加 setName 方法)并创建一个委托(delegate)包装类,该类提供您想要的方法(包装接口(interface)的实现)。

通过这种方式,您可以将包装属性和常规属性提供给任何需要它们的地方。

public class WrappedProperty implements IProperty {

    private String name;

    private Property prop;

    WrappedProperty (Property prop) {
        this.prop = prop;
    }

    protected void setName(String name) {
        this.name = name;
    }
    public int getWhatever() {
        return prop.getWhatever();
    }
    public int getFoobar() {
        return prop.getFoobar();
    }    
    public String getName() {
        if (this.name == null) {
           return prop.getName():
        } else {
            return this.name; 
        }
    }
}
public class Property implements IProperty {        

    public String getName() {
        return "blah";
    }
    public int getFoobar() {
        return 123;
    }
    public int getWhatever() {
        return 987;
    }
}
public interface IProperty {

    public int getWhatever();
    public int getFoobar();
    public String getName();

}

关于java - 如何在java中实现接口(interface)的类中添加 protected 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11156096/

相关文章:

java - "Data-normalized"是什么意思?

java - 如何从java中的ArrayList中删除重复条目

java - Elasticsearch 多个字段的通配符搜索

c# - 当我尝试从 Array 对象调用它时,无法识别 IList 接口(interface)中的 Remove 方法

C++ 编译器在使用 Bool 包装器类时报告不明确的函数调用

css - 切换显示 : none; on several related items individually, 还是将它们包装在另一个 div 中并切换它更好?

java - 用于匹配所有大写字母后跟冒号的单词的正则表达式模式

go - 继承和接口(interface)

C#:变量定义中的接口(interface)而不是类

html - CSS Wrapper 在导航时移动