我正在尝试为 AsyncTask 的 Result 参数设置上限,如下所示:
public class MyTask extends AsyncTask<T, Long, V extends Model>
编译器抱怨 'extends 不是预期的,它需要一个逗号。
我尝试将 Model 编写为抽象类和常规类。
有任何想法吗?
谢谢你,大卫
我正在尝试为 AsyncTask 的 Result 参数设置上限,如下所示:
public class MyTask extends AsyncTask<T, Long, V extends Model>
编译器抱怨 'extends 不是预期的,它需要一个逗号。
我尝试将 Model 编写为抽象类和常规类。
有任何想法吗?
谢谢你,大卫
由于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
. T
没有界限——它可以是任何引用类型。V
有一个上限。Model
- 它必须是某种类型 is 或 extends Model
。
extends AsyncTask<T, Long, V>
就像任何声明一个不扩展的类一样Object
,这就是说MyTask
扩展AsyncTask
——我相信你明白这一点。AsyncTask
具有三个类型参数:在其声明中,它们被称为Params
、Progress
和Result
。在这里,MyTask
为这些类型参数提供类型参数- T
、Long
和V
。
MyTask
保留Params
为无界类型参数也是如此,使用具体类型解析 ,并使用.Progress
Long
Result
Model
有关泛型的良好介绍,请参阅Java 教程。然后查看Angelika Langer 的泛型常见问题解答以了解更多问题。