Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将方法添加到内置类_Java_Inheritance_Extends_Code Reuse - Fatal编程技术网

Java 将方法添加到内置类

Java 将方法添加到内置类,java,inheritance,extends,code-reuse,Java,Inheritance,Extends,Code Reuse,我很确定这是行不通的,但我会继续祈祷,祈求上帝保佑 我正在尝试向内置类添加一个方法。我希望这个方法能够被所有内置类的子类调用。具体而言: 我有一个JButton、一个JTextPane和其他JComponents。我希望能够将JDom元素而不是矩形传递到setBounds()。我目前的解决方案是使用所需的方法扩展每个JComponent子类,但这是大量重复的代码。是否有一种方法可以只编写一次以下方法,并在所有JComponent对象上调用它?还是要求我单独扩展每个子类,并复制和粘贴下面的方法 p

我很确定这是行不通的,但我会继续祈祷,祈求上帝保佑

我正在尝试向内置类添加一个方法。我希望这个方法能够被所有内置类的子类调用。具体而言:

我有一个
JButton
、一个
JTextPane
和其他
JComponents
。我希望能够将
JDom元素
而不是
矩形
传递到
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()));
}

我建议采用以下方法。为元素类(称为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
   }
}


有了继承,你就不必写太多重复的东西了code@JigarJoshi我知道的唯一方法是为我使用的JComponent的每个子类编写重复的代码。除非我遗漏了什么?这是绝对可能的,但我强烈建议不要这样做,因为几乎总是有一种方法可以重新设计代码以避免这种需要。有什么原因不能将
元素
解析为一个
矩形
并直接使用它吗?我认为这似乎是一种很好的静态实用方法。可能
公共静态JComponent setBounds(JComponent comp,Element Element)
),然后
导入静态
,最后调用
setBounds(this,Element)
component.setBounds(new ComponentElement(element).getRectangle());