-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");
}
问题保持不变并且增加了另一个:方法call()现在是未定义的; – elke
我编辑了答案 –
我不确定你的意思。 insert方法在test2中正常工作;我只在test1遇到问题。 – elke