我有一个Vertex
类,该类的字段'element'是通用类型T
。 Vertex
类如下所示:
public class Vertex<T>{
private ObjectProperty<T> element;
private BooleanProperty visited;
public Vertex() {
element = null;
visited = new SimpleBooleanProperty(false);
}
public Vertex(T element) {
this.element = new SimpleObjectProperty<T>(element);
this.visited = new SimpleBooleanProperty(false);
}
public Vertex(T element, boolean visited) {
this.element = new SimpleObjectProperty<T>(element);
this.visited = new SimpleBooleanProperty(visited);
}
public void setElement(T elem) {
this.element.set(elem);
}
public T getElement() {
return this.element.get();
}
public ObjectProperty<T> elementProperty(){
return this.element;
}
public void setVisited(boolean b) {
this.visited.set(b);
}
public boolean isVisited() {
return this.visited.get();
}
public BooleanProperty visitedProperty(){
return this.visited;
}
@Override
public boolean equals(Object o) {
if(o == this) {
return true;
}
if(!(o instanceof Vertex<?>)) {
return false;
}
Vertex<?> v= (Vertex<?>) o;
if(v.getElement() instanceof String) {
return v.getElement().equals(this.element.get());
}else {
return v.getElement() == this.element.get();
}
}
@Override
public String toString() {
return element.get().toString();
}
}
我有一个ArrayList
个对象,Vertex<T>
个我想按顶点元素排序。在我的应用程序中,顶点元素的类型可以是Integer
,Double
或String
。
我尝试使用Comparator
,但是我不确定它们的工作方式,下面您可以看到我尝试实现的内容:
listOfNeighbours.sort(Comparator.comparing(Vertex::getElement));
其中listOfNeighbours
是ArrayList
个对象的Vertex<T>
。我收到Vertex::getElement
的错误消息,说'顶点类型未定义适用于此的getElement(Object)'
答案 0 :(得分:0)
如果您查看Comparator.comparing
的签名,则是通用参数U
extends Comparable<? super U>
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
这意味着getElement
返回的值必须为Comparable
。
注意:这里的T
类型是Vertex,U
是getElement
返回的类型。
您可以通过在Vertex类中使T
扩展Comparable<? super T>
来解决此问题。
class Vertex<T extends Comparable<? super T>> {...}