2017-12-15 15 views
0

ArrayDeque을 확장하는 데 문제가 있습니다. 내 문제는 다음 (mcve?) 아래로 내려갈 수 있습니다.ArrayDeque를 올바르게 확장하십시오.

내 대기열은 키 - 값 쌍 객체 만 사용합니다.

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()); 
    } 
} 

이 실패합니다. 나는 무엇을 잘못 했는가?

+0

왜 상속을 사용해야합니까? – Steephen

+0

@Steephen'ArrayDeque'가 가지고있는 다른 것들 ('isEmpty()','clear()','clone()'등)은 그대로 사용하려고합니다. – SiKing

+0

@ 이미 협회를 사용하여 티켓을 초기화했습니다. 나는 당신이 왜 상속과 상속을 필요로하는지 이유를 알지 못했습니까? – Steephen

답변

0

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 패스를합니다.

0

다음과 같이 구현을 최소화했습니다. 문제가 해결 될 수 있기를 바랍니다.

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());   
     } 
}