2016-01-28 61 views
-2

我尝试了几个小时来解决我的问题,但我没有任何想法了。我的任务是完成几个课程,我已经完成了所有期望的课程。泛型抽象扩展错误

它只是允许更改代码的第一行。 我的问题是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

兄弟,不知道如何在这里使用代码行 – 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没有输入。这就说得通了 –