2015-10-25 2 views
1

Я хочу вызвать статический метод унаследованного родового класса, см. Ниже код java. Как я могу это достичь?Вызов статического метода из Generic класса 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() будет в каждом классе, который расширяет класс надобъекта

+1

После тестирования его, по-видимому, можно назвать статические методы непосредственно из родового типа: 'T.get()' –

+0

Вам нужно объявить 'get()' на 'SuperObject', а затем использовать' T.get() ' –

+0

, как я могу объявить get() в SuperObject, если это статический метод? Как я знаю, вы не можете объявлять статические методы в абстрактном классе. –

ответ

-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 является родительским классом, в нем должен быть статический метод.

1

К сожалению, вы не можете напрямую вызывать методы по типу параметра T класса DataLoader. я предлагаю следующие возможные варианты решения:

  • Использование отражения
  • Pass экземпляр T методу doInBackground() и метод вызова на нем. Например

    public void doInBackground(T t, Void... params) { 
        t.get(); 
    } 
    
  • непосредственно вызвать метод на статический путь на супер класса, если он объявлен в нем: SuperObject.staticMethodName (...)

Смежные вопросы