2016-10-04 4 views
-1

моя задача состоит в том, чтобы написать первую строку из нескольких классов (сам код, который я не могу изменить), который я показавшиеся мастер, для задачи один сборника, кроме:Java универсального класс Autodialer и интерфейс Callable

Исключения в потоке " main "java.lang.Error: нерешенные проблемы компиляции: T не может быть разрешен к типу"

Проблема, я понимаю, однако, не в том, как это исправить. Кажется, что проблема заключается в классе AutoDialer. На всякий случай I добавлено все классы, извините, если это слишком много кода для небольшой проблемы. Спасибо.

public class Test { 

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

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


class AutoDialer <T extends AbstractConnection >{ 

    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(); 
     } 
    } 
} 
abstract class AbstractConnection implements Callable { 

    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(); 
    } 
} 
class Node <T> { 

    private T value; 
    private Node<T> next; 

    public Node(T value, Node<T> anchor) { 
     this.value = value; 
     this.next = anchor; 
    } 

    public T getValue() { return value; } 
    public Node<T> getNext() { return next; } 
} 

interface Callable { 

    void call(); 
} 
class Mail extends AbstractConnection { 

    public Mail(Person person) { 
     super("Mail", person); 
    } 

    @Override 
    public void connect() { 
     System.out.println("Establish Mail connection"); 
    } 
} 
class Person implements Callable{ 

    public final String name; 

    protected Person(String name) { 
     this.name = name; 
    } 

    @Override 
    public void call() { 
     System.out.println("Hello " + name); 
    } 
} 
class Phone extends AbstractConnection { 

    public Phone(Person person) { 
     super("Phone", person); 
    } 

    @Override 
    public void connect() { 
     System.out.println("Start voice synthesizer"); 
     System.out.println("Establish phone connection"); 
    } 

ответ

0

попробовать это

  class AutoDialer<T> 

Generic тип должен быть определен для всего класса первого

у вас есть такая же проблема в узле класса

и в своих методах тестирования необходимо указать тип, эти методы являются статическими, и вы не можете передавать их типам, даже если вы определяете их для своего класса

+0

проблема остается прежней и добавляет другую: метод call() теперь не определен; – elke

+0

Я отредактировал ответ –

+0

Я не уверен, что вы имеете в виду. Метод вставки отлично работает в test2; У меня только проблемы с test1. – elke

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