Like this ? ----------------------- package com..test;import java.util.ArrayList; import java.util.List;public class Main { /** * @param args */ public static void main(String[] args) { List<Base> arg =new ArrayList<Base>(); arg.add(new Base()); arg.add(new ClassA()); arg.add(new ClassB()); getFlag(arg); } private static <T extends Base> void getFlag(List<T> arg){ for(T t : arg){ System.out.println(t.getId()); } }
static class Base { public String getId(){ return "Base-id"; } } static class ClassA extends Base{ public String getId(){ return "A-id"; } } static class ClassB extends Base{ public String getId(){ return "B-id"; } }
}
泛型的写法: public abstract class ClassBase{ private int idpublic int getId(){ return id; } }public ClassA extends ClassBase{ }public ClassB extends ClassBase{ }public ClassC extends ClassBase{ }
for (T t : list) {
try {
Method method = t.getClass().getMethod("getId");
System.out.println("使用反射:" + method.invoke(t) + ":"
+ t.getClass().getSimpleName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
可以理解为一般应用开发的过程中不建议使用框架吗?
当然不是说不要用框架!
框架使用反射,一般是在启动的时候,只是一次性的(比如Spring的Bean加载,加载好了就放在内存里供使用)。
业务逻辑代码不要这样用反射,因为业务代码会频繁执行。你可以设计个测试类,测试一下反射和直接调用或者条件判断方式调用,看看耗时。
-----------------------
package com..test;import java.util.ArrayList;
import java.util.List;public class Main { /**
* @param args
*/
public static void main(String[] args) {
List<Base> arg =new ArrayList<Base>();
arg.add(new Base());
arg.add(new ClassA());
arg.add(new ClassB());
getFlag(arg);
} private static <T extends Base> void getFlag(List<T> arg){
for(T t : arg){
System.out.println(t.getId());
}
}
static class Base {
public String getId(){
return "Base-id";
}
} static class ClassA extends Base{
public String getId(){
return "A-id";
}
}
static class ClassB extends Base{
public String getId(){
return "B-id";
}
}
}
public abstract class ClassBase{
private int idpublic int getId(){
return id;
}
}public ClassA extends ClassBase{
}public ClassB extends ClassBase{
}public ClassC extends ClassBase{
}
private <T extends ClassBase> void getFlag(List<T extends ClassBase> list){
for(T t : list){
t.getId();
}
}