gpt4 book ai didi

java - 很难收到此类型的安全警告

转载 作者:行者123 更新时间:2023-11-30 03:00:10 24 4
gpt4 key购买 nike

所以我正在制作一个路径查找器类,它接受一个 .txt,该 .txt 的布局用 X 作为墙壁,空白作为开放区域等。(想想 PacMan)。

在我创建的一个 Graph 类中,我很难尝试实例化类型,但无论出于何种原因,当我给它一个类型时,仍然有一个 @SupressionWarning("unchecked") 警告。

这是我的图表类:

public class Graph {

public Node<String>[][] graphNodes;

/**
* The Graph
* @param rows - number of rows
* @param columns - number of columns
*/
@SuppressWarnings("unchecked") // <-- This is what I want to get rid of
public Graph(int height, int width)
{
graphNodes = new Node[width][height];
}

}

和 Node 类:

public class Node<T> {

int coordinateX, coordinateY; // Location of nodes in graph.
String data; // To hold data.
Node<String> cameFrom; // Use to know where the node came from last
boolean visited = false; // Start boolean visited as false for each Node.

public Node(String value, int row, int column)
{
coordinateX = row;
coordinateY = column;
data = value;
}


/**
* Get the node above the current node.
* @return the node above the current node.
*/
public static Node<String> getUp(Node<String> current){
return PathFinder.maze.graphNodes[current.coordinateX][current.coordinateY-1];
}

/**
* Get the node below the current node.
* @return the node below of the current node.
*/
public static Node<String> getDown(Node<String> current){
return PathFinder.maze.graphNodes[current.coordinateX][current.coordinateY+1];
}

/**
* Get the node to the left of the current node.
* @return the node to the left.
*/
public static Node<String> getLeft(Node<String> current){
return PathFinder.maze.graphNodes[current.coordinateX-1][current.coordinateY];
}

/**
* Get the node to the right of the current node.
* @return the node to the right.
*/
public static Node<String> getRight(Node<String> current){
return PathFinder.maze.graphNodes[current.coordinateX+1][current.coordinateY];
}
}

如果有人可以向我传授一些知识,那会发生什么?

最佳答案

Oracle docs说:

You cannot create arrays of parameterized types.

如果您使用原始类型(例如, Node 而不是 Node<String> ,如您在帖子中所示),您会收到未经检查的转换警告。

相反,请使用 ArrayList :

public class Graph {

public List<List<Node<String>>> graphNodes;

/**
* The Graph
* @param rows - number of rows
* @param columns - number of columns
*/
public Graph(int height, int width)
{
graphNodes = new ArrayList<>(height);
for (int i = 0; i < height; ++i) {
graphNodes.add(new ArrayList<>(width));
}
}
}

唯一的替代方案(除了抑制未经检查的警告之外)是利用语言规则中的漏洞并使用无限制的通配符类型:

public Node<?>[][] graphNodes;

然后:

graphNodes = new Node<?>[width][height];

然而,这是一个糟糕的方法,因为它完全放弃了类型安全。

附注:Node您发布的类根本不需要是泛型类型。只需摆脱 <T>类定义的参数和基于数组的代码应该可以正常工作。

关于java - 很难收到此类型的安全警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36214991/

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