Разница между <extends Comparable> и <extends Comparable <T>>?
Я попытался привести String к типу T, но там написано: "Необратимые типы; невозможно преобразовать java.lang.String в T". Однако, когда я удаляю "
public class Graph<T extends Comparable<T>> {
public void createGraph(Scanner in) {
String line;
String[] elements;
while (in.hasNextLine()) {
line = in.nextLine();
elements = line.split("\\s+");
insertVertex((T)elements[0]); // << This is the part
}
1 ответ
Ваш график имеет тип T
, Это означает, что я могу иметь график Person
с, например.
Затем в createGraph
Пытаешься вставить String
вершина в графе. Но String
не может быть приведен к Person
,
Если вы хотите createGraph
метод, который создает Graph<String>
тогда вам нужно это сделать static
, как это:
public Graph<String> createGraph(Scanner in) {
String line;
String[] elements;
Graph<String> graph = new Graph<>();
while (in.hasNextLine()) {
line = in.nextLine();
elements = line.split("\\s+");
graph.insertVertex(elements[0]);
}
// ...
// Anything else, like adding edges
// ...
return graph;
}
РЕДАКТИРОВАТЬ: причина, по которой ваш код без проблем компилируется при удалении <T>
в Comparable<T>
в том, что он становится графом Comparables (вместо графа лиц или графа строк), и тогда нет проблем с добавлением к нему как String, так и Person.