java - 为什么 getItem(position) 应该在泛型类(即 Custom ArrayAdapter<T>)内进行转换?

标签 java android generics android-arrayadapter

我正在尝试理解 Java 中的泛型。我在 Android 工作室工作。我有一个Word类(class)和我有一个ArrayListWord对象。

ArrayList<Word> words = new ArrayList<>();

我尝试创建一个像这样的通用类

public class wordAdapter<T> extends ArrayAdapter<T> {
    public wordAdapter(Context context, ArrayList<T> object) {
        super(context, 0, object);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get the data item for this position
        Word wordItem = getItem(position); 
        // This line gives an error because it needs to be casted to "Word"
        // Rest of the code
    }
}

现在,我的问题是为什么编译器会提示?当我使用这个类时,我将通过 ArrayList包含Word对象。因此,据我所知,以下代码行:

wordAdapter<Word> adapter = new wordAdapter<>(this, words);

应传输类型参数 <T>成为<Word> .
我不明白为什么编译器会处理从 getItem(position) 获得的对象如Object对象不是Word对象。另外我想知道既然它是通用的,编译器不应该忽略这些东西吗?它如何识别我将交付什么样的元素?

最佳答案

如果 WordAdapter 是包含 Word 元素的 ArrayAdapter,则应将其定义为:

public class WordAdapter extends ArrayAdapter<Word> {
    public WordAdapter(Context context, ArrayList<Word> object) {
        super(context, 0, object);
    }

    ...
}

这样 getItem(position) 将返回一个 Word

关于java - 为什么 getItem(position) 应该在泛型类(即 Custom ArrayAdapter<T>)内进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49099247/

相关文章:

java - Android: R.java: 错误 <identifier> 预期

generics - Angular2//为什么DependencyInjection with Generics只能在Components中起作用?

c# - 将类型参数限制为基本类型

android - React Native 如何链接到 iOS 和 Android 日历?

java - Spring MVC Controller 事务

java - 无法使用 javah -stubs 生成 JNI .c 文件

java - 对单词列表实现合并排序 - 原始单词附加回列表?

java - 添加操作栏(Android 教程)

java - 什么是原始类型,为什么我们不应该使用它呢?

java - Kafka堆外内存泄漏