#java
Вопрос:
я получаю
Метод MakeSet(Сопоставимый) в типе UnionFindSet неприменим для аргументов (K)
И не знаю , как это решить, я пытался реализовать сопоставимое, но ничего не изменилось…
Узел моего класса
public class Node <T extends Comparable<T>> implements Comparable<Node<T>>
Мой класс UnionFindSet использует узел :
public class UnionFindSet <T extends Comparable<T>>
Способ изготовления набора :
public void makeSet(T data){
Node<T> node = new Node<T>();
node.data(data)
.rank(0)
.parent(node);
node_map.put(data, node);
}
Мой класс, в котором я получаю ошибку :
public class Graph<K ,E>
и в методе :
public void mstKruskal() {
List<Edge<K, E>> secure_edges = new LinkedList<>();
UnionFindSet partition = new UnionFindSet<>();
List<Edge<K, E>> my_edges = new LinkedList<>();
my_edges = this.getEdges();
Collections.sort(my_edges, new Comparator<Edge<K, E>>() {
@Override
public int compare(Edge<K, E> left, Edge<K, E> right) {
return (int) (left.getWeight() - right.getWeight());
}
});
for (Map.Entry<K, List<Edge<K, E>>> entry : this.G.entrySet()) {
partition.makeSet(entry.getKey()); //-------------------> here i get the error
}
System.out.println(my_edges.toString());
}
Комментарии:
1. Почему вы используете необработанный тип » Раздел UnionFindSet = новый раздел UnionFindSet<>();` Не требует параметра UnionFindSet?
2. @мэтт правда , не заметил, что
3. @matt это в первой строке : метод MakeSet(Сопоставимый) в типе UnionFindSet неприменим для аргументов (K)
4. Выполнение : UnionFindSet<K> = новый UnionFindSet<K><K>(); Я получаю : Несоответствие привязки: Тип K не является допустимой заменой ограниченного параметра <K><T расширяет сопоставимый<T><T> типа UnionFindSet<T>><T>, я не думаю, что k сопоставим
5. вы имеете в виду график общедоступного класса<K , E, сопоставимый<K><K>> ? при этом все еще возникает ошибка
Ответ №1:
Что, по-видимому, произошло, вы создали класс, а затем создали «версию необработанного типа».
UnionFindSet partition = new UnionFindSet<>();
Затем, когда вы попытаетесь использовать этот метод,
public void makeSet(T data)
Это дает вам ошибку. Так как вы хотите использовать «набор(ключ)» для своего K
типа. Чтобы исправить это, вам необходимо параметризовать UnionFindSet,
UnionFindSet<K> partition = new UnionFindSet<>();
В этом есть ошибка, потому что вы не объявили K
как сопоставимые, поэтому вы можете обновить объявление графика.
class Graph<K extends Comparable<K>, E>
Таким образом, вы можете использовать K в качестве параметра набора UnionFindSet.