你混合了两件事:
构造数组
普通数组是非常低级的。没有方法,创建后它的长度是固定的。
MyType[] anArray = new MyType[10];
构造一个 ArrayList
ArrayList 只是一种 Collection 的实现
Collection<MyItemType> aCollection = new ArrayList<MyItemType>();
在你的情况下该怎么办?
你想要一个简单的集合数组(实现是 ArrayList)。所以:
// Create the array, use the interface in case you need to change the implementation later on
Collection<Point>[] touchPoints = (Collection<Point>) new Collection[2];
// Create each collection within that array, using the ArrayList implementation
touchPoints[0] = new ArrayList<Point>();
touchPoints[1] = new ArrayList<Point>();
如何做得更好?
试着想想为什么你需要一个普通的数组:
- 如果它只有 2 个元素,并且总是固定的,只需创建两个成员变量。
- 如果数量可以变化,只需创建一个集合集合 (Collection>)
根据您的用例进行编辑:
只需创建一个类来保存您的用户输入:
class UserInput {
public UserInput() {
user1TouchPoints = new ArrayList<Point>();
user2TouchPoints = new ArrayList<Point>();
}
// Add accessors and all
private Collection<Point> user1TouchPoints;
private Collection<Point> user2TouchPoints;
}
如果您打算拥有更多玩家,只需使用地图
class UserInput {
public UserInput() {
usersTouchPoints = new HashMap<Integer, Collection<Point>>();
}
public Collection<Point> getUserTouchPoints(Integer userId) {
return usersTouchPoints.get(userId);
}
public void addUserTouchPoints(Integer userId, Collection<Point> input) {
Collection<Point> points = usersTouchPoints.get(userId);
if (points==null) {
points = new ArrayList<Point>();
userTouchPoints.put(userId, points);
}
points.addAll(input);
}
// Maps a user ID (or index) to its touch points
// If you are using Android, use SparseArray instead of Map, this is more efficient
private Map<Integer, Collection<Point>> usersTouchPoints;
}