为什么我得到HashMap无法解析为类型错误?

时间:2017-07-01 14:31:47

标签: java

这是我的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

知道导致上述错误的原因以及如何修复它?

2 个答案:

答案 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;。这意味着polynomialMap,需要IntegerObject,但您需要指定polynomial = new HashMap<K, V>();。课程KV不是IntegerObject因此错误。

你可以写

polynomial = new HashMap<Integer, Object>();
那么它会起作用。你真正想要的是什么类型?为什么你甚至首先写了K, V?或者,为什么Integer, Object,为什么不坚持KV?而且,如果您希望保留V通用,则还需要将其添加到class Polynomial<K, V>