作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解 Java 中的泛型。我在 Android 工作室工作。我有一个Word
类(class)和我有一个ArrayList
的Word
对象。
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/
我是一名优秀的程序员,十分优秀!