Универсальные типы в интерфейсе и не универсальные в реализации - PullRequest
1 голос
/ 14 марта 2012

Я не знал, как правильно назвать этот вопрос, поэтому, если он лучше подходит для редактирования, сделайте это.Мой вопрос касается использования универсальных типов в интерфейсе, а затем вынуждает реализацию к определенному типу.Примерно так:

public interface Test<T> {
    void testMethod(Object<T> obj);
}

И затем вместо разрешения универсального объекта в реализации этого интерфейса установите тип как-то.

public class TestImpl implements Test<TestObject1> {
    @Override
    public void testMethod(TestObject1 obj) {
        //Do something
    }
}

public class Test2Impl implements Test<TestObject2> {
    @Override
    public void testMethod(TestObject2 obj) {
        //Do something
    }
}

За исключением того, что вы не можете параматизировать Object и iЯ не уверен, как это настроить.Это вообще возможно?Прямо сейчас я просто использую универсальный объект, но это заставляет меня проверять тип передаваемого класса для каждого отдельного метода и / или приведения и т. Д. И т. Д. Было бы намного чище, если бы я мог просто использовать дженерики в интерфейсе изатем конкретные классы по реализации.

1 Ответ

4 голосов
/ 14 марта 2012
public interface Test<T> {
    void testMethod(T obj);
}

Вы были близки.

Затем вы можете написать свои классы так, как они есть, если testMethod относится к передаваемому классу, или ...

public class TestImpl<T> implements Test<T> {
    @Override
    public void testMethod(T obj) {
        //Do something
    }
}

Теперь вы можете создать экземпляр класса с помощью new TestImpl<TestObject>() или new TestImpl<TestObject2>()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...