我有一个名为 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/