我有一个Object,它有一堆公共属性,没有getter和setter。坏! 所以我创建了一个包含属性的类,并为它们创建了getter和setter。我的计划是将对象包装在我的类中,这意味着不能直接访问属性。 我有点不确定如何做到这一点。我明白铸造很好。 我怎样才能将我的安全类与getter和setter包装在一起,并通过我的getter和setter访问属性?
答案 0 :(得分:6)
也许是这样的?
class MyCar implements ICar{
private final Car car;
public MyCar(Car car)
{
this.car = car;
}
public string getModel()
{
return car.model;
}
public void setModel(string value)
{
car.model = value;
}
}
现在不是传递Car
的实例,而是传递MyCar
具有getter和setter的实例或ICar
的引用,它可以让你准确控制你的内容想暴露(例如你可以暴露吸气剂)。
答案 1 :(得分:3)
使用构图。如果您使用公共属性的类称为Exposed,则执行
public class ExposedProtector {
private Exposed exposed; // private means it can't be accessed directly from its container
//public/protected methods here to proxy the access to the exposed.
}
请注意,任何内容都不会阻止其他人创建Exposed实例。您将不得不修改实际暴露的类本身,如果可能的话,这可能是更好的方法。
您应该查看java访问修饰符。从私人到受保护到公共,有不同的访问级别。
答案 2 :(得分:2)
如果您希望您的类与原始类插件兼容(意味着客户端代码不需要更改变量类型),那么您的类必须是客户端代码所期望的类的子类。在这种情况下,您无法隐藏公共变量,尽管您可以轻松添加getter和setter。但是,即使你是子类,如果原始类有其他子类也无济于事;他们不会看到那些吸气者和制定者。
如果你可以引入一个不相关的类,那么解决方案就是委托一切:
public class BetterThing {
private Thing thing;
public BetterThing(Thing thing) {
this.thing = thing;
}
public int getIntProperty1() {
return thing.property1;
}
public void setIntProperty1(int value) {
thing.property1 = value;
}
// etc.
}