请教各位大牛一个问题?有一个list集合中包含很多的A对象,A对象有5个字段,且每个对象的字段有值。现在有一个B对象,B对象也有和A一样的字段,只是有部分字段没有值,如何判断list集合包含B这样的对象。例如  List<Object> list = new ArrayList <Object> ();
       A a1 =new A ();
       A a2 =new A ();
       A a3 =new A ();
       list.add(a1);
       list.add(a2);
       list.add(a3);
       B b1 = new B();
java技术

解决方案 »

  1.   

    你的描述不太清晰,如果“B对象也有和A一样的字段”,那么B和A不是属于同一个类么,但是你下面的程序又貌似不是一个类。
    如果不是一个类那就更好办了,使用instanceof来判断类型
    if(list.get(i) instanceof B){
    ....
    }
      

  2.   

    你要判断有没有B对象,关B和A有相同字段什么关系?
      

  3.   

    不知道是不是这个意思
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;public class ListHava {
    public static void main(String[] args) {
    List<Object> list = new ArrayList<Object>();
    A a1 = new A();
    A a2 = new A();
    A a3 = new A();
    list.add(a1);
    list.add(a2);
    list.add(a3);
    B b1 = new B();
    list.add(b1);
    System.out.println(listHaveEqual(list, a1, b1));
    } public static boolean listHaveEqual(List<Object> l, Object p, Object q) {
    if((l.contains(p)&&l.contains(q))==false){
    return false;
    }
    Class pclass = p.getClass();
    Class qclass = q.getClass();
    Field[] f1 = pclass.getDeclaredFields();
    Field[] f2 = qclass.getDeclaredFields();
    for(int i=0;i<f1.length;i++){
    f1[i].setAccessible(true);
    }
    for(int i=0;i<f2.length;i++){
    f2[i].setAccessible(true);
    }
    for (Field f : f1) {
    System.out.println(f);
    String n = f.getName();
    Class t = f.getType();
    Boolean equal = false;
    for (Field ff : f2) {
    if (ff.getName().equals(n) && ff.getType().equals(t)) {
    equal = true;
    break;
    } }
    if (equal == false) {
    return false;
    }
    }
    return true; }
    }class A {
    int i = 1;
    int t = 3;
    boolean q = false;

    }class B {
    int i = 2;
    int t = 4;
    boolean q = true;
    String r = "dsfa";}
      

  4.   

    首先测试两个对象是否在同一个集合里面,然后比较两者的对象的字段,若p对象所拥有的所有字段都是q对象所拥有的(不管值多少),则返回true,反之false
      

  5.   

    instanceof B  就能判断是否为B了