2016-01-28 2 views
-2

Я пробовал несколько часов, чтобы исправить мою проблему, но у меня больше нет идей. Моя задача состоит в том, чтобы выполнить несколько классов, я уже все это ожидал.Generics Abstract Extends Error

Разрешено изменять первую строку кода. Моя проблема - это класс AutoDialer.

Autodialer

public class AutoDialer<T> extends AbstractConnection implements Callable { 

    private Node<T> anchor; 

    /* 
    * insert an element at the first position 
    */ 
    public void insert(T element) { 
     anchor = new Node<T>(element, anchor); 
    } 

    /* 
    * call call() method on all elements contained in the list 
    */ 
    public void callAll() { 
     Node<T> iterator = anchor; 

     while (iterator != null) { 
      iterator.getValue().call(); 
      iterator = iterator.getNext(); 
     } 
    } 
} 

Тест

public class Test 

    private static void test1() { 
     AutoDialer<Person> dialer = new AutoDialer<Person>(); 

     dialer.insert(new Person("Mrs. X")); 
     dialer.insert(new Person("Mr. Y")); 

     dialer.callAll(); 
    } 

    private static void test2() { 
     AutoDialer<AbstractConnection> dialer = new AutoDialer<AbstractConnection>(); 

     dialer.insert(new Mail(new Person("Mrs. X"))); 
     dialer.insert(new Phone(new Person("Mr. Y"))); 

     dialer.callAll(); 
    } 

    public static void main(String[] args) { 
     test1(); 
     test2(); 
    } 
} 

AbstractConnection

public abstract class AbstractConnection {   

    public final String type; 
    private Person person; 

    protected AbstractConnection(String type, Person person) { 
     this.type = type; 
     this.person = person; 
    } 

    public Person getPerson() { 
     return person; 
    } 

    protected abstract void connect(); 

    /* 
    * establish a connection (implemented in subclass) and then call the person 
    */ 
    public void call() { 
     connect(); 
     getPerson().call(); 
    } 
} 
+0

Bro I, не знаю, как использовать строки кода здесь – Nado

+0

Расширяет ли 'AutoDialer'' AbstractConnection' или 'T'? Как в настоящее время написано, это первый, поэтому я не думаю, что 'iterator.getValue(). Call()' должен работать –

+0

Не имеет для меня никакого смысла, что 'AbstractConnection' имеет в качестве атрибута' Person'. –

ответ

0

После Вашего Test класса, вы хотите передать какой-либо подкласс AbstractConnection в качестве типа для AutoDialer.

Но с вашей декларацией текущего класса вы говорите, что AutoDialer сам распространяет AbstractConnection.

Изменить это:

public class AutoDialer<T extends AbstractConnection> implements Callable 

Я не знаю, почему вы используете отзывной интерфейс, хотя, так как любой AbstractConnection уже реализовать call метод.

+0

Я уже сказал сделать это в комментариях, но OP просто сказал, что «это не сработало» –

+0

У вас есть дополнительный на 'AbstractConnection' , Может быть, это и вызвало «это не сработало»: D – Bifz

+0

Да, я думаю, что AbstractConnection не напечатано. В этом есть смысл –

Смежные вопросы