2016-10-04 48 views
-1

我的任务是写几类(代码本身我不能改变),我都没能掌握的第一行,除了一个编译问题:在线程Java的泛型类自动拨号界面可赎回

异常“主要是“java.lang.Error:未解决的编译问题:T不能解析为一个类型”

然而,我明白的问题不是如何解决它的问题似乎是类AutoDialer。添加了所有涉及的类,对不起,如果它的代码太多,有点问题。谢谢。

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> 

泛型类型应该全班第一

您在Node类

,并在您的测试方法相同的问题来定义你需要指定类型这些方法是静态的,即使你为它们的类定义它,你也不能将类型传递给它们。

+0

问题保持不变并且增加了另一个:方法call()现在是未定义的; – elke

+0

我编辑了答案 –

+0

我不确定你的意思。 insert方法在test2中正常工作;我只在test1遇到问题。 – elke