定义
public void testMethod(List list){
     在这里,怎样得到list里面的对象呢?     <------------问题在这
}调用方法1
List list = new ArrayList();
for(int i=0;i<10;i++){
   User user = new User();
   user.setName="lilei"+i;
   list.add(user);
}
testMethod(list);调用方法2
List list = new ArrayList();
for(int i=0;i<10;i++){
   Person person = new Person();
   person .setPersonName="lilei"+i;
   list.add(person );
}testMethod(list);我的list里面装的是对象,但每次对象可能不一样
有时是User这个对象,有时是Person这个对象或者是其它

解决方案 »

  1.   

    不知道我理解的对不对!~lz可以声明成员变量List,该list存的是Object但是在取的时候楼主可以用instanceof判断一下是那个类型,再做处理!~
      

  2.   

    好几个办法,
    1. User和Person有一个共同的基类:import java.util.ArrayList;
    abstract class People
    {
    private String name;

    void setName(String name)
    {
    this.name = name;
    }
    }class User extends People
    {}class Person extends People
    {

    }
    public class Abc {

    private ArrayList<People> list = new ArrayList<People>();

    public void testMethod(ArrayList<People> list){
    for (People people : list) {
    people.setName("New Name");
    }
    }

    public static void main(String[] args) {
    }
    }
      

  3.   


    healer_kx 确实技高一筹,我还没去考虑这个东西!
      

  4.   

    User 和 People 所测试的东西肯定是不一样的!用一个类中的 testMethod 方法来测试不同对象的话,那就是违反了单一职责原则!
      

  5.   


    我现在是举例有User或者Person,实际可能有100多个情况,不可能一个一个判断阿
      

  6.   

    http://topic.csdn.net/u/20110514/22/2d7c5b42-f611-4c88-8b1b-68cc5f4fd63a.html?02310356600110488
         求帮助
      

  7.   


    第一,如果它们没有共性,那你确实应该像火龙果说的,分开Test~
    第二,确实可以用反射,但是没有共性,也要找出来共性嘛,你做出来一个函数里面能处理多种类型的。
    不是对象有共性,也得找个有共性的元数据描述它们。
      

  8.   

    声明一个接口Testable,有一个方法test(),list里面的类去实现Testalbe接口,test里面放该类需要测试的方法。
    public class User implements Testable(){
    public void test(){
       //user需要测试的东西
    }
    }
    public class People implements Testable(){
    public void test(){
       //people需要测试的东西
    }
    }
    public void testMethod(List<Testable> list){
         //list.get(index).test 这样测试
    }
      

  9.   

    楼主的也就两种类型·先使用Object将list里的对象拿到··然后try{强制转换成User}catch{转换成Person}``这样应该也可以··
      

  10.   

    使用反射取得对象声明的属性值
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.List;public class Test {
    public static void main(String[] args) {
    test1();

    test2();
    } public static void testMethod(List list) throws IllegalArgumentException,
    IllegalAccessException {
    for (Object obj : list) {
    // 取得类中声明的属性
    Field[] fields = obj.getClass().getDeclaredFields();
    for (Field f : fields) {
    // 取得此对象中每个属性的值
    f.setAccessible(true); // 设置protected, private属性可以访问,否则会抛异常
    System.out.println(f.get(obj));
    }
    }
    } public static void test1() {
    List list = new ArrayList();
    for (int i = 0; i < 10; i++) {
    User user = new User();
    user.setName("lilei" + i);
    list.add(user);
    }
    try {
    testMethod(list);
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    } public static void test2() {
    List list = new ArrayList();
    for (int i = 0; i < 10; i++) {
    Person person = new Person();
    person.setPersonName("Goooooo" + i);
    list.add(person);
    } try {
    testMethod(list);
    } catch (IllegalArgumentException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    }
    }
    }class User {
    private String name; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }}class Person {
    private String personName; public String getPersonName() {
    return personName;
    } public void setPersonName(String personName) {
    this.personName = personName;
    }}
      

  11.   

    就是这个,这个就是我想要的。。
    但是想问下,我之前在网上也搜过类似的,我也试过,但不行。。
    看了你这个后再去试了下也不行
    不知道问题在那呢?public void testMethod(List list){
        Class object = list.get(0).getClass();
        Field field = object.getField("name");   <----这时这里会报一个找不到对应方法的错
        Object obj = field.get(object);
        System.out.println(obj);
    }
      

  12.   

    import java.lang.reflect.Field;public class Test {
    public static void main(String[] args) throws SecurityException,
    NoSuchFieldException, IllegalArgumentException,
    IllegalAccessException {
    User2 user = new User2("Biao");
    Class clazz = user.getClass();

    // 使用Declared Field: 可以取得所有类型的属性,如public, protected, private
    Field field = clazz.getDeclaredField("name");
    field.setAccessible(true);
    Object obj = field.get(user);
    System.out.println(obj);

    // 使用Field: 只能取得public的属性
    for (Field f : clazz.getFields()) {
    System.out.println(f.getName());
    }
    }
    }class User2 {
    private String name; public User2() {
    } public User2(String name) {
    this.name = name;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }
    }
      

  13.   

    Field getField(String name) 
              Returns a Field object that reflects the specified public member field of the class or interface represented by this Class object.Field getDeclaredField(String name) 
              Returns a Field object that reflects the specified declared field of the class or interface represented by this Class object.