目标:我需要创建一个或多个函数来处理不同类型的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
方法正确,那么请您提供一个关于如何用不同类型迭代列表的小例子。
提前致谢 :)
编辑:不同的对象彼此没有关系,例如,它们不相互扩展,也不扩展超类。每个函数的块都生成一个 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
并且不确定它的性能和成本,所以我试图自己做一个。现在这是一种可怕的做法吗?