2012-03-14 4 views
2

Я не был уверен, как правильно назвать этот вопрос, поэтому, если он лучше подходит для редактирования, сделайте это. Мой вопрос связан с использованием общих типов в интерфейсе, а затем для принудительного внедрения в определенный тип. Что-то вроде этого:Общие типы в интерфейсе и не общие для реализации

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 
    } 
} 

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

+1

Почему вы используете 'Object '? вы можете использовать 'void testMethod (T obj);' direct в вашем дизайне интерфейса. –

ответ

4
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>()

Смежные вопросы