包装对象

时间:2011-05-26 12:53:38

标签: java object wrapper wrapping

我有一个Object,它有一堆公共属性,没有getter和setter。坏! 所以我创建了一个包含属性的类,并为它们创建了getter和setter。我的计划是将对象包装在我的类中,这意味着不能直接访问属性。 我有点不确定如何做到这一点。我明白铸造很好。 我怎样才能将我的安全类与getter和setter包装在一起,并通过我的getter和setter访问属性?

3 个答案:

答案 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.
}