泛型摘要扩展错误

时间:2016-01-28 04:01:20

标签: java class generics abstract extends

我试了几个小时来解决我的问题,但我已经没有想法了。 我的任务是完成几个课程,我已经完成了所有期望。

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

1 个答案:

答案 0 :(得分:0)

关注Test课程后,您希望传递AbstractConnection的任何子类作为AutoDialer的类型。

但是根据您当前的课程声明,您告诉AutoDialer本身延伸AbstractConnection

将其更改为:

public class AutoDialer<T extends AbstractConnection> implements Callable

我不知道你为什么要使用Callable接口,因为任何AbstractConnection都必须实现call方法。