我正在寻找一种方法在一个固定长度的集合中存储不同的数据类型,所以我可以通过索引设置/获取元素。最好的方法是什么? 谢谢!
编辑: 这有用吗?
private List t=new ArrayList();
t.set(2,"test");
我得到这个:java.lang.IndexOutOfBoundsException:Index:2,Size:0
答案 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
id
,name
,gender
,dateOfBirth
,active
等。
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);
// ...