У меня есть классы, как показано ниже.Классы проектирования/интерфейс для поддержки методов, возвращающих разные типы
public interface ITest <T>
{
public Set<T> methodHere();
}
public class test1 implements ITest<String>
{
Set<String> methodHere(){
return // Set of String
}
}
public class test2 implements ITest<Integer>
{
Set<Integer> methodHere(){
return // Set of Integer
}
}
public class ITestFactory {
public static ITest getInstance(int type) {
if(type == 1) return new test1();
else if(type == 2) return new test2();
}
}
public class TestUser {
public doSomething(int type) {
ITest t = ITestFactory.getInstance(type);
if(type == 1) Set<Integer> i = t.methodHere();
else if(type == 2) Set<String> s = t.methodHere();
...
}
}
В заводском классе есть предупреждение о том, что ITest используется как необработанный тип. Какую модификацию я должен сделать, чтобы избавиться от нее?
Код TestUser выглядит уродливым. Я что-то пропустил? Я не хочу использовать Set<?>
Благодарности Найн
Хотя это хороший ответ, комментарий от @Thirler «Когда вы вызываете getInstance, невозможно узнать, какой тип будет возвращен» заставил меня задуматься над моим дизайном. Я не использую generics, но создал чистую иерархию классов. – Nayn
Обновлен мой вопрос. Я все еще не здесь. – Nayn