моя задача состоит в том, чтобы написать первую строку из нескольких классов (сам код, который я не могу изменить), который я показавшиеся мастер, для задачи один сборника, кроме: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");
}
проблема остается прежней и добавляет другую: метод call() теперь не определен; – elke
Я отредактировал ответ –
Я не уверен, что вы имеете в виду. Метод вставки отлично работает в test2; У меня только проблемы с test1. – elke