Цель: мне нужно создать функцию или функции для обработки различных параметров List
, и я буду выполнять итерацию по списку в функции.Функция с общим параметром списка? (Функция перегрузки)
Попытки:
1- Множество функций с различным типом списка
public static int update(List<MyClass> myClasses){};
public static int update(List<Project> rojects){};
public static int update(List<Time> times){};
Но что считающиеся быть в-компилируется в связи с множеством функций, с таким же типом параметра List
.
2 Общий тип списка и использование (instanceof
) Однако я не смог полностью сделать это, так как я не уверен, как и насколько я читаю, это кажется неблагоприятным способом такого действия.
Мой вопрос: что такое Java-способ реализации такого требования? Мне нужен чистый код, мне все равно, сложно ли это, я в основном забочусь о точности и правильном кодировании.
PS: Если вы правильно указали instanceof
, пожалуйста, предоставьте мне небольшой пример того, как перебирать список с разными типами.
Заранее спасибо :)
EDIT: Различные объекты не имеют никакого отношения друг с другом, как они не проходят друг друга и они не распространяются супер класс. Блоки каждой функции генерируют SQLite-утверждения, которые бы отличались для каждого типа.
Ответить на «суровые отвечает:
Так что я в конечном итоге, используя комбинацию ваших предложений, и это реализовать базовый класс с функцией getClassType()
, которая возвращает строку имени класса, то я бы проверил возвращаемое значение в функции update(List<T> list)
.
public static <T extends Item> int update(List<T> list){
...
// Loop through the list and call the update function
for (T item: list){
if (item.getClassType() == MyClass.CLASS_TYPE)
update((MyClass) item);
}
...
}
public interface Item {
/**
* @return Return the class type, which is the name of the class
*/
public String getClassType();
}
public class ClassProject implements Item{
public static final String CLASS_TYPE = "ClassProject";
@Override
public String getClassType() {
return CLASS_TYPE;
}
...
}
public class ClassTime implements Item{
public static final String CLASS_TYPE = "ClassTime";
@Override
public String getClassType() {
return CLASS_TYPE;
}
...
}
public class MyClass implements Item{
public static final String CLASS_TYPE = "MyClass";
@Override
public String getClassType() {
return CLASS_TYPE;
}
...
}
Причина делать весь этот interface
, потому что я не люблю istanceof
и не уверен, что его производительность и стоимость, поэтому я попытался сделать один из моих собственных. Теперь это ужасный способ сделать это?
Что происходит в блоках обработки разных типов? Изменяется ли код, если его список, если тип A соответствует списку типа B, или является общим кодом и независимо от базового типа в списке. Ответ на это позволит решить один из двух возможных подходов. – cmbaxter
было бы совершенно иначе, в зависимости от типа. Код должен создавать SQLite-операторы обновления для каждого элемента в списке и разные для каждого типа элемента. – LuckyMe