添加方法到内置类

时间:2014-06-10 03:14:07

标签: java inheritance extends code-reuse

我很确定这是不可行的,但我会继续指责并问。

我正在尝试将方法添加到内置类中。我希望这个方法可以被所有内置类的子类调用。具体做法是:

我有JButtonJTextPane和其他JComponents。我希望能够将JDom Element代替Rectangle传递给setBounds()。我目前的解决方案是使用所需的方法扩展每个JComponent子类,但这是很多重复的代码。有没有办法我可以只编写一次以下方法,并且可以在所有JComponent对象上调用它?或者是否需要单独扩展每个子类,并复制并粘贴下面的方法?

public void setBounds(Element element) {
    this.setBounds(Integer.parseInt(element.getAttribute(
            "x").toString()), Integer.parseInt(element
            .getAttribute("y").toString()), Integer
            .parseInt(element.getAttribute("width").toString()),
            Integer.parseInt(element.getAttribute("height")
                    .toString()));
}

1 个答案:

答案 0 :(得分:0)

我建议采取以下方式。为Element类编写一个包装器(称为ComponentElement),如下所示。

class ComponentElement{
   private Element e;
   public ComponentElement(Element e)
   {
      this.e = e;
   }
   public int getX()
   {
      return Integer.parseInt(e.getAttribute("x").toString());
   }
   //similar methods like getY(),getWidth(),getHeight() etc..
}

然后,无论您想要设置组件的边界,

ComponentElement e = new ElementWrapper(element)
component.setBounds(e.getX(),e.getY(),e.getWdith(),e.getHeight());

这将删除您必须重复的大部分样板代码(getAttribute / Integer.parseInt等...)。

它不涉及静态方法。这些方法属于他们所在的地方。 (getX方法属于ComponentElement类。如果你使用静态方法,你会把它放在哪里?一些“Util”类?你怎么命名它?在同一个类中还有哪些其他方法?)

修改 或者更好,

class ComponentElement{
   private Element e;
   public ComponentElement(Element e)
   {
      this.e = e;
   }


   Public Rectangle getRectangle()
   {
      return //a rectangle based on the attributes
   }
}

component.setBounds(new ComponentElement(element).getRectangle());