Hellow
我创建了一个类Packet,如下所示
public class Packet
{
private long arrivalTime = 0;
private boolean classType = true;
public Packet(long arrivalTime, boolean classType)
{
this.arrivalTime = arrivalTime;
this.classType = classType;
}
在程序中我有两种方法;
public ArrayList<Packet> simulateArrProces (long loopCount)
{
//DO STUFF
}
public void enqueue(Packet...packets)
{
//DO STUFF
}
目标是使用simulateArrProces方法返回的ArrayList作为enqueue方法的输入。我以为我可以简单地给出第一个方法的ArrayList,但这似乎不起作用。我尝试了以下
Arrival arr = new Arrival(arrivalProces);
Queue que = new QueueFCFS();
List l = arr.simulateArrProces(0);
que.enqueue(l.toArray());
很明显,我应该将返回的simulateArrProces的ArrayList转换为某些东西,但是我找不到。我认为这是因为我选择使用'Packet ... packet',但我并没有完全理解这个表达的含义。
总之;两个问题 1.如何将simulateArrProces返回的ArrayList转换为我可以在enqueue方法中使用的东西。 2. Packet ...数据包的确切含义
答案 0 :(得分:3)
toArray
的{{1}}方法(Collection
以及随后的List
继承)以overload为特征,采用(空)数组ArrayList
(您的参数化类型)作为参数:这是您应该使用的,以便不返回T
。
反过来,这可以传递给一个采用该类型的varargs作为参数的方法。
示例强>
...鉴于
Object[]
以下是您可以使用的“好”与“坏”习语:
List<String> foo() {
// just as example
return new ArrayList<String>();
}
void bar(String... s) {
// nope
}
答案 1 :(得分:1)
让我们从数据包...数据包开始。
它的var-args特性是java。这意味着您可以传递任意数量的数据包对象。它会隐式转换为Packet
数组,因此您也可以传递数组
示例1:
class Packet {
// your implementation goes here
}
class SomeClassWithVarArgs{
void foo(Packet ... packet);
}
// So you can do the following:
Packet p1 = new Packet();
Packet p2 = new Packet();
Packet p3 = new Packet();
SomeClassWithVarArgs s = new SomeClassWithVarArgs();
// all these are legal
s.foo(p1, p2,p3);
s.foo(p1, p2);
s.foo(p3, p3,p3,p3,p3);
// implicit conversion to array:
Packet [] arrayOfPackets = new Packet[] {p1, p2,p3};
s.foo(arrayOfPackets);
现在关于toArray。 它只是一个你必须学习的编译相关问题。
显然,你不能将ArrayList和List都传递给enqueue(Packet... packets)
。所以你已经尝试将列表转换为数组,这是一个很好的尝试。
但是toArray
会返回Object []
,显然它不是您想要的。
所以你应该使用以下方法:
示例2:
List<Packet> li = ...
Packet [] arr = li.toArray(new Packet[li.size()]);
// now you can pass it to enqueue method
enqueue(arr);
希望这有帮助