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++;
}
}
}