我这里有两个类ClassA, ClassB的某些字段及其set get方法是一样的
但又不能用继承,但在某个方法上的处理逻辑完全一样,因此我想用泛型
处理,但试验了不行public void genericTest(List<ClassA> testList){//单个ClassA。ClassB逻辑完全和这个一样 for(ClassA cA : testList){
if(cA.getAge() > 60){
//......
}
}
}
public void genericTest(List<?> testList){//不能生效的泛型应用
for(Object obj : testList){
if(obj.getAge() > 60){
//......
}
}
}请问有什么好的方法能够让List<ClassA>,List<ClassB>均在一个方法中处理么?
谢谢!
但又不能用继承,但在某个方法上的处理逻辑完全一样,因此我想用泛型
处理,但试验了不行public void genericTest(List<ClassA> testList){//单个ClassA。ClassB逻辑完全和这个一样 for(ClassA cA : testList){
if(cA.getAge() > 60){
//......
}
}
}
public void genericTest(List<?> testList){//不能生效的泛型应用
for(Object obj : testList){
if(obj.getAge() > 60){
//......
}
}
}请问有什么好的方法能够让List<ClassA>,List<ClassB>均在一个方法中处理么?
谢谢!
*
* @author simba
*/
public class Test {
public static void main(String[] args){
Test test = new Test();
LinkedList<MyInterface> lista = new LinkedList<MyInterface>();
lista.add(new ClassA());
lista.add(new ClassA());
test.myprint(lista);
LinkedList<MyInterface> listb = new LinkedList<MyInterface>();
listb.add(new ClassB());
listb.add(new ClassB());
test.myprint(listb);
}
void myprint(LinkedList<MyInterface> list){
for(MyInterface mi : list){
mi.print();
}
}
}interface MyInterface{
public void print();
}class ClassA implements MyInterface{ @Override
public void print() {
System.out.println("Class A");
}
}class ClassB implements MyInterface{ @Override
public void print() {
System.out.println("Class B");
}
}
输出如下:
run:
Class A
Class A
Class B
Class B
成功生成(总时间:0 秒)
有没有其他方法,泛型的话有没有解决的可能
List target = new ArrayList();
target.add(new ClassA());
target.add(new ClassB());
Test t = new Test();
t.genericTest(target);
}
public void genericTest(List<?> testList){
try{
for(Object obj : testList){
Method m = obj.getClass().getDeclaredMethod("getAge");
if(Integer.valueOf(m.invoke(obj).toString()) > 60){
System.out.println(obj.getClass().getName()+" gt");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
for(T t : testList){
if(t.getAge() > 60){
//......
}
}
}
try {
Method m = obj.getClass().getMethod("getAge");
System.out.println(Integer.valueOf(m.invoke(obj)));
} catch (Exception e) {
e.printStackTrace();
}
}
像你这样的需求,个人认为最好是创建两个方法:
processClassA(List<ClassA> lists);
processClassB(List<ClassB> lists);
原因是你在使用已存在的类,而且它们间没有什么关系,虽然方法名相同,处理逻辑相似,但在不同的Class中也许是完全不同的逻辑,将来某个类加个什么字段、方法的,需要修改if(obj.getAge() > 60 && ...),而且只对其中一个适合,那你就方便维护了;
ClassA和ClassB如果确实是没有什么关联的,最好是分开处理;
再说反射对于性能的影响是很大的;
可以找一本基本的java书看看那