我正在尝试为 AsyncTask 的结果参数设置上限,如下所示:
public class MyTask extends AsyncTask<T, Long, V extends Model>
编译器提示'extends is not expected, it's expecting a comma.
我曾尝试将模型编写为抽象类和常规类。
有什么想法吗?
谢谢, 大卫
最佳答案
由于 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
,并且将 Result
与 Model
绑定(bind)。
参见 Java Tutorials以获得对泛型的良好介绍。然后看Angelika Langer's Generics FAQ进一步的问题。
关于java - 我无法为 AsyncTask 的结果参数设置上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612393/