我正在尝试设置AsyncTask的Result参数的上限,如下所示:
public class MyTask extends AsyncTask<T, Long, V extends Model>
编译器抱怨'延伸不是预期的,它期待逗号。
我曾尝试将Model编写为抽象类和常规类。
有什么想法吗?
谢谢你, 大卫
答案 0 :(得分:2)
由于T
和V
是未解析的类型参数,因此需要对MyTask
进行参数化。尝试声明以下内容:
public class MyTask<T, V extends Model> extends AsyncTask<T, Long, V>
我也将calls
更改为class
- 我认为这是一个错字。
回复您的评论:
MyTask<T, V extends Model>
此处,MyClass
声明类型参数T
和V
。声明类型参数时,可以选择使用extends
bounded 。 T
不受限制 - 它可以是任何引用类型。 V
的上限为Model
。 - 它必须是某种类型或扩展Model
。
extends AsyncTask<T, Long, V>
就像没有延伸Object
的课程的任何声明一样,这就是说MyTask
延伸AsyncTask
- 我相信你明白这一点。 AsyncTask
有三个类型参数:在其声明中,它们被称为Params
,Progress
和Result
。在这里,MyTask
通过类型参数 - T
,Long
和V
提供这些类型参数。
因此MyTask
将Params
保留为无限类型参数,使用具体类型Progress
解析 Long
,并限制{{1}与Result
。
有关泛型的详细介绍,请参阅Java Tutorials。然后,请参阅Angelika Langer's Generics FAQ以获取更多问题。