java - Java 原始类型案例中的显式类型转换
问题描述
我读了一本关于带有 Java 示例的 OOP 模式的书。书中的类代码示例:
public class Board {
private int width, height;
private List tiles;
...
private void initialize() {
tiles = new ArrayList(width);
for (int i=0; i<width; i++) {
tiles.add(i, new ArrayList(height));
for (int j=0; j<height; j++) {
((ArrayList)tiles.get(i)).add(j, new Tile());
}
}
}
public Tile getTile(int x, int y) {
return (Tile)((ArrayList)tiles.get(x-1)).get(y-1);
}
}
问题:
为什么在两种描述的方法中都使用了显式类型转换?第一种情况是ArrayList in line ((ArrayList)tiles.get(i)).add(j, new Tile());
,第二种情况是Tile in line return (Tile)((ArrayList)tiles.get(x-1)).get(y-1);
。我的意思是,这是脚本作者的意见还是在 Java 案例中是必要的?
解决方案
这是较旧的 Java 代码,在引入泛型之前,因此List
接口返回Object
而不是所需的类型。看起来,用现代的话来说,他们想要一些类似的东西
private List<List<Tile>> tiles;
然后initialize
(假设我没有拼写错误)可能看起来像:
private void initialize() {
tiles = new ArrayList<>(width);
for (int i=0; i<width; i++) {
tiles.add(i, new ArrayList<>(height));
for (int j=0; j<height; j++) {
tiles.get(i)).add(j, new Tile();
}
}
}
(我相信Array
原始代码中的错字是ArrayList
)
和
public Tile getTile(int x, int y) {
return tiles.get(x-1).get(y-1);
}
推荐阅读
- phpstorm - 在 PhpStorm 中按下 Enter 按钮后缩进
- python - 如何像 kahoot 那样将 IP 和端口加密成一个数字?
- docker - 如何使用外部 c++ 库加速 c++ 项目的 docker 映像构建?
- django - 在 File.read() 上使用编码 UTF-8
- shell - shell脚本中的指令顺序
- wordpress - 如何将外部 API 连接到 wordpress?
- javascript - 添加 FontAwsome Icon + Text 给我错误
- c - SSL write err:5, errno 145, Connection timed out
- java - 如何查询我的 Firebase 数据库?
- python - 如何从现有的 falcon api 生成 Open API 规范?