2014-12-07 7 views
0

Я попытался применить String к типу T, но он говорит: «Неконвертируемые типы: не может отличить« java.lang.String »до« T ». Однако, когда я удаляю« < T> »от < T extends Сопоставимый < T .?>> и зафиксировать, что < T расширяет Сопоставимые>, это хорошо, что разница Ниже приведен код:.Разница между <extends Comparable> и <extends Comparable < 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 
    } 

ответ

0

Ваш график типа T это означает, что я могу иметь график Person s, например.

Затем, в 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; 
} 

EDIT: Причина ваш код компилируется без проблем, когда вы удалите <T> в Comparable<T> заключается в том, что он становится графиком Comparables (вместо графика лиц или графика строк), а затем нет никакой проблемы с добавлением к нему как String, так и Person.

+0

Это именно то, что я хотел. Благодарю. – KeepCoding

Смежные вопросы