这是我的Java代码:
import java.util.HashMap;
import java.util.Map;
public class Polynomial<K> {
Map<Integer, Object> polynomial;
public Polynomial(){
polynomial = new HashMap<K, V>();
}
public Polynomial(int numberOfMembers){
polynomial = new HashMap<K, V>(numberOfMembers);
}
public void addElm(int power, int coefficient){
if (power < 0) {
power = Math.abs(power);
throw new RuntimeException("ERROR: The power must be an absolute number, converting to absolute");
}
for (Map.Entry m : polynomial.entrySet()) {
if ((Integer) m.getKey() == power){
polynomial.put(power,m.getValue());
}
}
}
}
在这两行:
polynomial = new HashMap<K, V>();
和此:
polynomial = new HashMap<K, V>(numberOfMembers);
我收到此错误:
HashMap<K,V> cannot be resolved to a type
知道导致上述错误的原因以及如何修复它?
答案 0 :(得分:3)
我认为您实际上并不打算使用您拥有的仿制药。
创建new HashMap<K,V>()
时,这些<K,V>
值是HashMap将保存的类型的实际类名。在您的情况下,这些类型是Integer和Object,因此您应该编写new HashMap<Integer, Object>()
。
即使这是不必要的,因为Java可以推断HashMap的类型,因为您已经定义了一次。最好只使用新的HashMap<>();
public class Polynomial {
Map<Integer, Object> polynomial;
public Polynomial() {
polynomial = new HashMap<>();
}
public Polynomial(int numberOfMembers) {
polynomial = new HashMap<>(numberOfMembers);
}
public void addElm(int power, int coefficient) {
if (power < 0) {
power = Math.abs(power);
throw new RuntimeException("ERROR: The power must be an absolute number, converting to absolute");
}
for (Entry<Integer, Object> m : polynomial.entrySet()) {
if ((Integer) m.getKey() == power) {
polynomial.put(power, m.getValue());
}
}
}
}
答案 1 :(得分:2)
你写Map<Integer, Object> polynomial;
。这意味着polynomial
是Map
,需要Integer
和Object
,但您需要指定polynomial = new HashMap<K, V>();
。课程K
和V
不是Integer
和Object
因此错误。
你可以写
polynomial = new HashMap<Integer, Object>();
那么它会起作用。你真正想要的是什么类型?为什么你甚至首先写了K, V
?或者,为什么Integer, Object
,为什么不坚持K
和V
?而且,如果您希望保留V
通用,则还需要将其添加到class Polynomial<K, V>
。