首页 > 解决方案 > 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 案例中是必要的?

标签: javaraw-types

解决方案


这是较旧的 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);
}

推荐阅读