gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:57:27 24 4
gpt4 key购买 nike

我正在尝试理解 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com