我得到的编译器警告是:
Markov.java:40: warning: [unchecked] unchecked call to addElement(E) as a member of the raw type java.util.Vector
suf.addElement(word);
这是代码:
void add(String word)
{
Vector suf = (Vector) statetab.get(prefix);
if (suf == null) {
suf = new Vector();
statetab.put(new Prefix(prefix), suf);
}
suf.addElement(word);
prefix.pref.removeElementAt(0);
prefix.pref.addElement(word); // same error here
我是Java的新手,我正在尝试运行Brian W. Kernighan和Rob Pike的编程实践中的代码。
答案 0 :(得分:2)
Vector
是一种集合类型,可以声明使用"泛型"它包含什么类型的元素。事实上,强烈建议您在其中声明内容,以及发出警告的原因。
使用尖括号(<Type>
)声明集合中的类型。在您的情况下,Vector
包含字符串,因此它变为Vector<String>
Hashtable<Prefix,Vector<String>> statetab; // proper type for statetab
void add(String word)
{
Vector<String> suf = statetab.get(prefix);
if (suf == null) {
suf = new Vector<String>();
statetab.put(new Prefix(prefix), suf);
}
suf.addElement(word);
prefix.pref.removeElementAt(0);
prefix.pref.addElement(word); // same error here
您可以修改上面的代码 - 但是您没有显示您声明statetab
的位置,因此我猜测了您应该如何更改其类型。
您应该可以更改pref
课程中的字段Prefix
并将其设为Vector<String>
。
答案 1 :(得分:2)