我在扩展ArrayDeque时遇到问题。我的问题可以提炼出来(mcve?)具体到以下几点:
我的队列将只接受键-值对对象。
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayDeque;
public class TicketsQueue<E> extends ArrayDeque<E> {
transient ArrayDeque<SimpleEntry<String, String>> tickets = new ArrayDeque<SimpleEntry<String, String>>();
public boolean offer(String category, String ticketId) {
return tickets.offer(new SimpleEntry<String, String>(category, ticketId));
}
}我也有一个自定义的poll()方法,但我不认为这与我的问题有关。ArrayDeque打算按原样使用的大多数其他东西。
然后,我尝试这样使用我的TicketsQueue:
public class TicketsQueueTest {
@Test
public void testTixQueue() {
TicketsQueue<SimpleEntry<String, String>> tixQueue = new TicketsQueue<SimpleEntry<String, String>>();
tixQueue.offer("foo", "bar");
Assert.assertFalse("It's empty!", tixQueue.isEmpty());
}
}此操作失败。我做错了什么?
发布于 2017-12-16 04:56:50
在读完关于联想的文章后,感谢Steephen,我想出了以下解决办法:
public class TicketsQueue<E> extends ArrayDeque<E> {
public boolean offer(String category, String ticketId) {
return offer((E) new SimpleEntry<String, String>(category, ticketId));
}
}这让我的TicketsQueueTest通过了。
发布于 2017-12-16 04:40:36
我已经最小化了实现,如下所示。我希望这能解决你的问题。
public class TicketsQueue{
transient ArrayDeque<SimpleEntry<String, String>> tickets = new ArrayDeque<SimpleEntry<String, String>>();
public boolean offer(String category, String ticketId) {
return tickets.offer(new SimpleEntry<String, String>(category, ticketId));
}
public static void main(String args[]) {
TicketsQueue tixQueue = new TicketsQueue();
tixQueue.offer("foo", "bar");
assert(tixQueue.tickets.isEmpty());
}
}https://stackoverflow.com/questions/47839150
复制相似问题