Java 执行通用异步任务

Java 执行通用异步任务,java,android,generics,android-asynctask,Java,Android,Generics,Android Asynctask,我正在尝试编写一个执行一般异步任务的静态实用程序函数。 我想到了这个: public static void executeAsync(Class<? extends AsyncTask<?, ?, ?>> task, Object[] params) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.

我正在尝试编写一个执行一般异步任务的静态实用程序函数。 我想到了这个:

public static void executeAsync(Class<? extends AsyncTask<?, ?, ?>> task, Object[] params) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
    } else {
        task.execute(params);
    }
}
公共静态void executeSync(类>任务,对象[]参数){
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.HONEYCOMB){
task.executeOnExecutor(AsyncTask.THREAD\u POOL\u EXECUTOR,params);
}否则{
task.execute(params);
}
}

但它还不足以编译。。有什么想法吗?

使用服务更简单,它可以多次启动

参数的类型为Object[],但ASyncTask的类型为“any”(
)。但是Java不支持泛型数组。因此,
?[]参数
是不可能的

可能使用
仅使用:

public static void executeAsync(AsyncTask<?, ?, ?> task, Object[] params) {
公共静态void executeAsync(异步任务,对象[]参数){
而不是:

public static void executeAsync(Class<? extends AsyncTask<?, ?, ?>> task, // ...
publicstaticvoidexecuteasync(类>任务,//。。。
因为您不需要传递类,只需要传递实际实例

编辑

正如您在评论中提到的,还有一个参数化类型不匹配,因此您还需要调整参数类型。因此签名应该如下所示:

public static void executeAsync(AsyncTask<Object, ?, ?> task, Object[] params) 
公共静态void executeAsync(异步任务,对象[]参数)
或者(为了使其更“灵活”)

publicstaticvoidexecuteasync(异步任务,T…参数){

如果启用了lint,也可以使用suppress lint注释
@SuppressLint({“InlinedApi”,“NewApi”})

谢谢。必须将?更改为对象,因此请更新..public static void executeAsync(AsyncTask任务,Object[]params)你是对的。事实上,只要是
executeAsync(AsyncTask任务,Object[]params)
-只有第一个参数化类型相关。调用函数时遇到问题。.GetGoogleProfileTask任务=新建GetGoogleProfileTask(data.getStringExtra(AccountManager.KEY\u ACCOUNT\u NAME));executeAsync(task,null);给出编译错误,
GetGoogleProfileTask
看起来如何?
public static <T> void executeAsync(AsyncTask<T, ?, ?> task, T... params) {