有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从泛型类java调用静态方法

我想调用继承的泛型类的静态方法,请参见下面的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) 个答案

  1. # 1 楼答案

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

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

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

  2. # 2 楼答案

    我对你的课程没什么改变。以下是你如何做到这一点

    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是一个父类,所以它里面应该有一个静态方法