Разница между <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.

Другие вопросы по тегам