【问题标题】:Wrapper methods and wrapper classes [closed]包装器方法和包装器类 [关闭]
【发布时间】:2012-05-12 12:57:31
【问题描述】:

我目前正在准备考试,我在这篇文章的底部遇到了一个问题。它与 Wrapper 方法与 Wrapper 类有关。这里有区别吗?据我了解,包装类允许将原语包装在对象中,以便它们可以包含在集合之类的东西中。 Wrapper 类也有一堆实用方法,允许在字符串对象之间进行转换。我在下面有一个问题,询问包装器方法并将它们与 getter/setter 方法联系起来。我是否认为 set wrapper 方法只是采用一个原语并将其包装在一个对象中,还是在做一些不同的事情?

什么是包装器方法以及它们何时有用?

在 City 类中编写 set/get 包装方法,允许直接访问其位置的每个属性、纬度和经度。例如,setLatitude:

class City {
    //...

    public void setLatitude(double value) 
    {
        location.setLat(value);
    }

    //your code:
}

【问题讨论】:

  • 听起来像 getter 和 setter 方法。
  • 包装方法是一个非标准术语(AFAIK)。在我看来,他们所谓的包装方法是只委托给另一个包装对象的方法。在上面,setLatitude() 代表Location.setLat()
  • 你说的是包装类还是包装方法?
  • 基本上,不存在包装方法之类的东西。某个地方的某个人可能会定义该术语,但它并不常用。
  • 我非常有信心包装类只是将基元包装到对象中的一种方式,因此它们可以包含在集合之类的东西中。然而,我遇到的问题是关于包装方法的讨论,并将它们与 getter/setter 联系起来。也许我在这里遗漏了一些非常明显的东西。设置器是否在对象中包装了一个原语(这是一个在此处传递的双精度)?只是猜测

标签: java wrapper


【解决方案1】:

包装类是扩展某个类或原语的可用性的类。以此类为例:

public class NewBoolean{
    private boolean value = false;
    public NewBoolean(boolean state) {
        value = state;
    }
    public boolean value() {
        return value;
    }
    public void setValue(boolean value) {
        this.value = value;
    }
    public boolean isTrue() {
        return value;
    }

    public boolean isFalse() {
        return !value;
    }

    public boolean compare(boolean anotherBoolean){
       return value==anotherBoolean;
    }
}

它可以替换任何boolean 值,并且具有可以扩展boolean 原语可用性的新方法。

包装方法可以引用包装函数。 包装器方法只是调用其他方法的方法,例如,我们可能在一个类中有这两个方法:

public void setFullScreen() { }
public void setWindowMode() { }

包装方法可能是:

public void toggleFullScreen() {
    if(fullscreen) {
         setWindowMode();
    }
    else {
         setFullScreen();
    }
}

简而言之,一个调用类中已经存在的另一个方法的方法。另一个例子是setResolution(w,h); 和一个调用setDefaultResolution() 的包装器方法,而后者又会在内部调用setResolution(DEFAULT_W,DEFAULT_H)

【讨论】:

  • public boolean isTrue() {return value;} public boolean isFalse() {return !value;}
  • 那里的逻辑和优化很好。
  • public boolean compare(boolean anotherBoolean) { return value==anotherBoolean;}。看到图案了吗?每次有if (booleanExpression) { return true; } else { return false; },都应该直接返回布尔表达式。
【解决方案2】:

我听说“包装器类”一词被用作装饰器类的同义词(请参阅'decorator pattern'),它的用途更多,仅允许将原始类型插入到集合中

【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2012-12-25
    • 1970-01-01
    • 2011-03-25
    • 2013-01-09
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多