Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Class - Fatal编程技术网

Java如何直接向类中添加项,而不是使用数组对象

Java如何直接向类中添加项,而不是使用数组对象,java,arrays,class,Java,Arrays,Class,我有一个数组作为类的一部分,可以向其中添加项,但我想直接向类本身添加项。可能吗 public class Buttons { public Array<SimpleButton> buttons = new Array<SimpleButton>(); } 但我想直接添加如下项目: buttons.buttons.add(simpButton); buttons.add(simpButton); 您可以向类中添加add函数,并通过class对象使用它 pub

我有一个数组作为类的一部分,可以向其中添加项,但我想直接向类本身添加项。可能吗

public class Buttons {
    public Array<SimpleButton> buttons = new Array<SimpleButton>();
}
但我想直接添加如下项目:

buttons.buttons.add(simpButton);
buttons.add(simpButton);

您可以向类中添加add函数,并通过class对象使用它

public class Buttons {
public Array<SimpleButton> buttons = new Array<SimpleButton>();

public void add(SimpleButton input){
      //Handle invalid input
      buttons.add(input);
}
}
否则,如果你不想走这条路,你可以做以下事情-

public class Buttons extends Array<SimpleButton>

如果您确定您的类基本上充当列表,那么可以使用Guava提供的ForwardingList。顾名思义,它会将所有调用转发给获得的委托实例。这样,您不必自己实现所有方法,只能覆盖特定的方法

public class ButtonList extends ForwardingList<SimpleButton> {

    private final List<SimpleButton> delegate = new ArrayList<>();

    @Override 
    protected List<SimpleButton> delegate() {
        return delegate;
    }

}
但是,如果您的类不充当列表,我建议您自己创建所需的委托方法。这将隐藏实现并使将来的更改更容易。当然,这可能需要做一些工作,但是现代IDE已经为您提供了创建委托方法的支持

参考资料:

您可以使用ArrayList并扩展所有ArrayList方法示例:

import java.util.ArrayList;

public class Buttons extends ArrayList{
    public  ArrayList<String> buttons = new ArrayList<String>();

}
主要类别:

public class Main{
    public static void main(String[] args) {
        Buttons buttons = new Buttons();
        buttons.add("button 1");

        int i=0;
        while(i < buttons.size())
        {
            System.out.println(buttons.get(i));
            i++;
        }
    }
}

好的,这是一个有趣的解决方法,但是数组仍然不能作为按钮以任何其他方式访问,它仍然必须作为buttons.buttons访问,例如buttons.buttons.size。您可以创建任何需要的函数来阻止buttons.buttons访问。我不明白您的意思。我能看到的唯一方法是为每个数组方法生成一个函数,这显然是不实际的。@Hasen可以使用按钮扩展数组,而不是将数组作为字段成员。我不推荐这种方法,但它会给出您想要的结果。RR_IL建议的是正确的处理方法:定义所需的方法,然后实现逻辑或将逻辑委托给字段成员。@Hasen如果您决定以后可能出于性能原因,甚至为了修复错误,将实现从数组更改为列表或集,您需要更改公共接口,这可能会破坏依赖于先前公共接口的现有代码。Glains的答案是通过隐藏底层实现来避免这个问题&公开接口而不是具体的实现。然而,他的答案使用List,所以只有当数组实现List.interest时,它才会起作用。与扩展Array或ArrayList相比,这会更好或不同吗?归根结底,这并不是灵活性的问题。如果您确定它仍然是一个列表,请选择ForwardingList,您可以稍后更改实际实现ArrayList、LinkedList、。。。无需修改所有其他引用,因为您只使用Listinterface。如果您想要更大的灵活性,请选择ForwardingCollection。
ButtonList list = new ButtonList();
list.add(new SimpleButton());
int size = list.size(); // 1
import java.util.ArrayList;

public class Buttons extends ArrayList{
    public  ArrayList<String> buttons = new ArrayList<String>();

}
public class Main{
    public static void main(String[] args) {
        Buttons buttons = new Buttons();
        buttons.add("button 1");

        int i=0;
        while(i < buttons.size())
        {
            System.out.println(buttons.get(i));
            i++;
        }
    }
}