带有比较器声明且无警告的Java通用树映射
下一步我有什么办法可以不显示黄色警告/@SuppressWarnings(“未选中”) 泛型对象: p=要比较的产品,C=客户带有比较器声明且无警告的Java通用树映射,java,generics,Java,Generics,下一步我有什么办法可以不显示黄色警告/@SuppressWarnings(“未选中”) 泛型对象: p=要比较的产品,C=客户 public static myComparator<Product<P>> comparator= new myComparator<Product<P>>(); publicstaticmycomparatorcomparator=newmycomparator(); 比较器声明在“insertIntoMap”方法
public static myComparator<Product<P>> comparator= new myComparator<Product<P>>();
publicstaticmycomparatorcomparator=newmycomparator();
比较器声明在“insertIntoMap”方法之外,
我无法在“insertIntoMap”方法中使用产品对象
publicstatictreemap插入图(LinkedHashSetset,C[]ac){
@抑制警告(“未选中”)
TreeMap TreeMap=新的TreeMap((比较器从您发布的代码中可以看出:
myComparator不应是通用的:
public class myComperator implements Comparator<Product<?>> {
@Override
public int compare(Product<?> o1, Product<?> o2) {
if (o1.getName().length() > o2.getName().length())
return 1;
else if (o1.getName().length() < o2.getName().length())
return -1;
else
return -1;
}
}
什么是comperator
以及它是如何声明的?很难理解你想做什么。这甚至不能编译。请将你的代码编辑成可编译的东西,否则很难知道你想完成什么。TreeMap
需要一个比较器,我不能在方法中使用产品我知道希望你是对的,我的讲师要道歉^^他想让我使用带比较器的映射来比较乘积,而不使用对象“product”在方法内部。你不应该在insertIntoMap
或myComperator
中使用Product
?你可以将comparator作为参数来传递,以避免第一个参数。令人惊讶的是,你是对的,我通过了它,而且它很有效……我希望他不会说我甚至不能通过它……因为他说这个方法只得到2个参数rs,非常感谢你!!!
public static class Product<E> implements Comparable<E>{
private E serialNum;
private String name;
Product(E serialNum,String name){
setSerialNum(serialNum);
setName(name);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result;
result = prime * result + ((serialNum == null) ? 0 : serialNum.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
Product<?> other = (Product<?>) obj;
if (serialNum.equals(other.serialNum))return true;
else return false;
}
public E getSerialNum() {
return serialNum;
}
public void setSerialNum(E serialNum) {
this.serialNum = serialNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return serialNum.toString()+": "+name;
}
@Override
public int compareTo(E o) {
if(this.hashCode()>o.hashCode())return 1;
else if(this.hashCode()<o.hashCode()) return -1;
else return -1;
}
}
public class myComperator implements Comparator<Product<?>> {
@Override
public int compare(Product<?> o1, Product<?> o2) {
if (o1.getName().length() > o2.getName().length())
return 1;
else if (o1.getName().length() < o2.getName().length())
return -1;
else
return -1;
}
}
public static <P extends Product<?>, C> TreeMap<P, C> insertIntoMap(
LinkedHashSet<P> set, C[] ac) {
TreeMap<P, C> treeMap = new TreeMap<P, C>(new myComperator());
int itrIndex = 0;
Iterator<P> itr = set.iterator();
while (itr.hasNext()) {
treeMap.put(itr.next(), ac[itrIndex]);
itrIndex++;
}
return treeMap;
}