Java从通用Class对象获取方法

时间:2013-08-26 13:40:00

标签: java function class generics types

我有一个像下面这样的方法,这个类包含一个对象列表,到目前为止可以传入2个不同的类。

public class DataTableEntity {
 List<Objects> objectContainer;

 public void setLinks(Class cls){
 for(Object obj : objectContainer){
  //the cls variable will hold what type of object it is 
  //so I need to somehow say if its a 'dog' then the obj I am going through is a dog
  // and the method is dog.getName else it might be cat and cat.getCatName etc.
 }
}

此函数会被告知List具体是什么,然后应该在发送到客户端之前正确格式化该列表中对象的属性。不同的对象具有不同的setter和getter名称。所以我需要以某种方式获取泛型Class对象,看看它究竟是什么类,这样我就可以知道使用什么方法,“。getAbc / .setAbc”或“.getXyz / .setXyz”。

这可能吗?

2 个答案:

答案 0 :(得分:1)

喜欢这个吗?

public class DataTableEntity {
    List<Objects> objectContainer;

    // The Objects know already which Class they are, no need to pass it
    public void setLinks() {
        for(Object obj : objectContainer) {
            if(obj instanceof ClassA) {
                ClassA a = (ClassA)obj;
                a.doSomething();
            }
            else if(obj instanceof ClassB) {
                ClassB b = (ClassB)obj;
                b.doSomethingElse();
            }
            // and so on ...
        }
    }
}

通用接口可以使代码更好,因为您不必检查所有不同的类。但我不知道你的案件是否可能

答案 1 :(得分:0)

您是否听说过 instanceof 声明?

它允许您检查对象是否是类的实例或其子类,并返回布尔值。

像:

anyObject instanceof Object       // return true

integerObject instanceof Integer  // return true

integerObject instanceof Number   // return true

integerObject instanceof Double   // return false