2016-10-04 35 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