从Generic类java调用静态方法

时间:2015-10-25 07:08:55

标签: java generics

我想调用继承泛型类的静态方法,请看下面的java代码。我怎样才能做到这一点?

public class DataLoader<T extends SuperObject> extends AsyncTask<Void, Void, Void> {

    @Override
    protected void doInBackground(Void... params) {
        //here I want to call static method get() of T
    }

}

public abstract class SuperObject {
}

public class SomeObject extends SuperObject {
    public static String get() {
        return "string";
    }  
}

方法get()将在每个扩展SuperObject类

的类中

2 个答案:

答案 0 :(得分:1)

不幸的是,您无法直接调用类DataLoader的类型参数 T 上的方法。 我建议以下可能的解决方案变体:

  • 使用反射
  • T 的实例传递给方法doInBackground()并调用方法。 例如

    public void doInBackground(T t, Void... params) {
        t.get();
    }
    
  • 如果在超类中声明,则直接在超类上以静态方式调用方法:SuperObject.staticMethodName(...)

答案 1 :(得分:-1)

我几乎没有改变你的课程。以下是如何实现这一目标。

public class DataLoader<T extends SuperObject> extends AsyncTask<Void, Void, Void> {

    @Override
    protected void doInBackground(Void... params) {
        T.get();
    }

}

public abstract class SuperObject {
    public static String get() {
        return "string";
    } 
}

public class SomeObject extends SuperObject {

}

因为SuperObject是一个父类,所以静态方法应该在其中。