我无法为AsyncTask的Result参数设置上限

时间:2013-01-30 19:47:02

标签: java android generics android-asynctask upperbound

我正在尝试设置AsyncTask的Result参数的上限,如下所示:

public class MyTask extends AsyncTask<T, Long, V extends Model> 

编译器抱怨'延伸不是预期的,它期待逗号。

我曾尝试将Model编写为抽象类和常规类。

有什么想法吗?

谢谢你, 大卫

1 个答案:

答案 0 :(得分:2)

由于TV是未解析的类型参数,因此需要对MyTask进行参数化。尝试声明以下内容:

public class MyTask<T, V extends Model> extends AsyncTask<T, Long, V>

我也将calls更改为class - 我认为这是一个错字。

回复您的评论:

MyTask<T, V extends Model>

此处,MyClass 声明类型参数TV。声明类型参数时,可以选择使用extends bounded T不受限制 - 它可以是任何引用类型。 V上限Model。 - 它必须是某种类型或扩展Model

extends AsyncTask<T, Long, V>

就像没有延伸Object的课程的任何声明一样,这就是说MyTask延伸AsyncTask - 我相信你明白这一点。 AsyncTask有三个类型参数:在其声明中,它们被称为ParamsProgressResult。在这里,MyTask通过类型参数 - TLongV提供这些类型参数。

因此MyTaskParams保留为无限类型参数,使用具体类型Progress解析 Long,并限制{{1}与Result

有关泛型的详细介绍,请参阅Java Tutorials。然后,请参阅Angelika Langer's Generics FAQ以获取更多问题。