将数组传递给 Java 中具有不同类型的变量
Passing an array to a variable that has a different type in Java
我有一个 class InQueue 具有以下内容:
static Queue<String> q = null;
public InQueue(String[] input){
q = new LinkedList<String>();
}
public static Queue<String> newInputQueue(String[] inputArray){
q.addAll(Arrays.asList(inputArray));
q.add("$");
return q;
}
我在 main 中有一个数组,我正在尝试这样做:
String[] inputArr = {"id", "+", "id", "*", "id"};
InQueue inQueue = new InQueue(inputArr);
我想将 inputArr 传递给 inQueue,以便我的数组进入队列。但显然我不能那样做,因为 InQueue 构造函数没有参数。有没有办法做到这一点?我尝试了各种方法,但大多数方法要么不起作用,要么 return 一个空队列。
您可以简单地自己创建该构造函数:
public InQueue(String[] arr){
q = new LinkedList<String>(Arrays.asList(arr));
}
您还应该从字段 q
和 newInputQueue
方法中删除 static
关键字,是否有原因?
将您的 class 更改为如下内容:
private Queue<String> q = null;
private InQueue(){
q = new LinkedList<String>();
}
public static InQueue newInputQueue(String[] inputArray){
InQueue res = new InQueue();
res.q.addAll(Arrays.asList(inputArray));
res.q.add("$");
return res;
}
这与您的代码之间的主要区别是什么?首先是数据成员缺少静态。 static 表示对于 class 的所有实例,该对象都是“静态的”(类似于 unique/shared)。摆脱它以避免将来的麻烦。
构造函数已变为私有,这告诉任何用户,应该有另一种构造对象的方法。
构造对象的另一种方法是静态函数,它可以调用私有构造函数(因为它们在同一个 classe 中)并且可以访问 class 的任何数据成员本身。
现在,无论何时需要分配 InQueue,只需使用静态工厂即可。
InQueue myQueue = InQueue.newInputQueue(someArray);
最简单的方法是向 InQueue class 添加另一个构造函数,将数组转换为 LinkedList。类似于:
public InQueue(String[] inputArr) {
q = new LinkedList<> (Arrays.asList(inputArr));
}
或者,您可以使用已有的方法并重新分配,例如:
String[] inputArr = {"id", "+", "id", "*", "id"};
InQueue inQueue = new InQueue();
inQueue = inQueue.newInputQueue(inputArr);
我有一个 class InQueue 具有以下内容:
static Queue<String> q = null;
public InQueue(String[] input){
q = new LinkedList<String>();
}
public static Queue<String> newInputQueue(String[] inputArray){
q.addAll(Arrays.asList(inputArray));
q.add("$");
return q;
}
我在 main 中有一个数组,我正在尝试这样做:
String[] inputArr = {"id", "+", "id", "*", "id"};
InQueue inQueue = new InQueue(inputArr);
我想将 inputArr 传递给 inQueue,以便我的数组进入队列。但显然我不能那样做,因为 InQueue 构造函数没有参数。有没有办法做到这一点?我尝试了各种方法,但大多数方法要么不起作用,要么 return 一个空队列。
您可以简单地自己创建该构造函数:
public InQueue(String[] arr){
q = new LinkedList<String>(Arrays.asList(arr));
}
您还应该从字段 q
和 newInputQueue
方法中删除 static
关键字,是否有原因?
将您的 class 更改为如下内容:
private Queue<String> q = null;
private InQueue(){
q = new LinkedList<String>();
}
public static InQueue newInputQueue(String[] inputArray){
InQueue res = new InQueue();
res.q.addAll(Arrays.asList(inputArray));
res.q.add("$");
return res;
}
这与您的代码之间的主要区别是什么?首先是数据成员缺少静态。 static 表示对于 class 的所有实例,该对象都是“静态的”(类似于 unique/shared)。摆脱它以避免将来的麻烦。
构造函数已变为私有,这告诉任何用户,应该有另一种构造对象的方法。
构造对象的另一种方法是静态函数,它可以调用私有构造函数(因为它们在同一个 classe 中)并且可以访问 class 的任何数据成员本身。
现在,无论何时需要分配 InQueue,只需使用静态工厂即可。
InQueue myQueue = InQueue.newInputQueue(someArray);
最简单的方法是向 InQueue class 添加另一个构造函数,将数组转换为 LinkedList。类似于:
public InQueue(String[] inputArr) {
q = new LinkedList<> (Arrays.asList(inputArr));
}
或者,您可以使用已有的方法并重新分配,例如:
String[] inputArr = {"id", "+", "id", "*", "id"};
InQueue inQueue = new InQueue();
inQueue = inQueue.newInputQueue(inputArr);