Java中是否有固定长度的通用数组对象?

时间:2011-04-03 23:37:30

标签: java arrays generics

我正在寻找一种方法在一个固定长度的集合中存储不同的数据类型,所以我可以通过索引设置/获取元素。最好的方法是什么? 谢谢!

编辑: 这有用吗?

private List t=new ArrayList();
t.set(2,"test");

我得到这个:java.lang.IndexOutOfBoundsException:Index:2,Size:0

4 个答案:

答案 0 :(得分:2)

  

这应该有用吗?

private List t=new ArrayList();
t.set(2,"test");

不,不应该。如果您使用超出列表末尾的位置调用set,则列表不会自动增长。 (见the javadoc。)

如果你想做那种事情,你必须先用null元素填充List; e.g。

private List t=new ArrayList();
for (int i = 0; i < LIMIT; i++) {
    t.add(null);
}
...
t.set(2,"test");

但我也想重申其他各种答案所提出的观点。您应该编写一个类,并以类型安全的方式执行此操作。把东西塞进Object[]List<Object> ...并希望你得到正确的索引和类型...给你脆弱的代码。这是不良做法

答案 1 :(得分:0)

你可以用List做这样的事情。它通过索引获取/设置方法。我不明白为什么固定长度在这里很重要。

您始终可以在自己设计的类中精确地封装所需的行为。您可以拥有一个支持阵列来为您管理它,但您必须自己完成所有工作。

答案 2 :(得分:0)

你不能制作一个Object的数组吗?这意味着除了基本类型(int,char,boolean等)之外的所有内容;如果你想存储它们,你必须将它们包装在相应的Object Wrapper类中(整数,字符,布尔等)。所以像:

mult_type[0] = "A String";
mult_type[1] = new Integer(42);
mult_type[2] = new Long(7149994000);

等等。虽然mult_type [i]是定义的对象,但是条目 存储在那里可以有Object的任何子类。当你想要检索它们时, 你可以检查它们,找出它们实际属于哪个类。那里 有两种方法可以做到这一点,一种是使用“instanceof”运算符 像这样:

if (mult_type[i] instanceof Integer) {
Integer anInteger = (Integer)mult_type[i];
int anInt = anInteger.intValue();
}

请注意,您必须将对象“强制转换”为其实际类 检索它。

答案 3 :(得分:0)

你需要一个Javabean。创建一个类,它代表所有这些不同属性的整体画面。例如。一个User idnamegenderdateOfBirthactive等。

public class User {
    private Long id;
    private String name;
    private Gender gender;
    private Date dateOfBirth;
    private Boolean active;

    // Add/generate c'tor(s)/getters/setters/equals and other boilerplate.
}

通过这种方式,您最终可以获得清晰且可重复使用的抽象。

User user = new User();
user.setName("John Doe");
user.setGender(Gender.MALE);
// ...

另见: