Java通用类由Generic ArrayList支持
问题描述:
我写了一个非常简单的类Sack
,它保存了一些数据,没有特定的顺序,实际的数据由ArrayList保存。我实现了类和它的方法,一切看起来都很好,但我在测试类中收到了编译时错误。Java通用类由Generic ArrayList支持
袋类:
public class Sack<E>
{
//I suspect this might be the culprit, not sure if I can do this
//but it compiles fine, should this maybe be of type Object?
ArrayList<E> contents = new ArrayList<E>();
public void add(E item)
{
contents.add(item);
}
public boolean contains(E item)
{
return contents.contains(item);
}
public boolean remove(E item)
{
return contents.remove(item);
}
public Object removeRandom()
{
if(isEmpty())
{
return null;
}
else
{
int index = (int)(Math.random() * size());
return contents.remove(index);
}
}
public int size()
{
return contents.size();
}
public boolean isEmpty()
{
return contents.isEmpty();
}
}
主要类:
public class SackDriver
{
Sack<Integer> s = new Sack<Integer>();
Integer i = new Integer(2);
s.add(new Integer(1)); //<- Error
s.add(i); //<- Error
s.add(3); //<- Error
s.add(4); //<- Error
s.add(5); //<- Error
s.add(6); //<- Error
System.out.println("Size: " + s.size() + " Contains: " + s.contains(5));
}
这是我收到的每个呼叫的错误添加():
SackDriver.java:11: error: <identifier> expected
s.add(x);
不知道我在这里做错了什么,任何帮助,将不胜感激。
答
Sack<Integer> s = new Sack<Integer>();
Integer i = new Integer(2);
s.add(new Integer(1)); //<- Error
s.add(i); //<- Error
s.add(3); //<- Error
s.add(4); //<- Error
s.add(5); //<- Error
s.add(6); //<- Error
System.out.println("Size: " + s.size() + " Contains: " + s.contains(5));
这需要在方法,构造函数或静态块中,而不仅仅是在类中。它与泛型无关。
答
您必须在方法或块中使用此代码,否则您无法在此处制作它。即
void test(){
s.add(new Integer(1)); //<- Error s.add(i); //<- Error s.add(3); //<- Error s.add(4); //<- Error s.add(5); //<- Error s.add(6); //<- Error System.out.println("Size: " + s.size() + " Contains: " + s.contains(5));
}
或者使用
class SackDriver {
Sack<Integer> s = new Sack<Integer>();
Integer i = new Integer(2);
{
s.add(new Integer(1));
//<- Error
s.add(i);
//<- Error
s.add(3);
//<- Error
s.add(4);
//<- Error
s.add(5);
//<- Error
s.add(6);
//<- Error
System.out.println("Size: " + s.size() + " Contains: " + s.contains(5));
}
}
在一个叫做主静态方法:“公共静态无效的主要(字串[] args)” – Luciano 2012-04-12 16:06:43
谢谢你..不知道我怎么忽略了。 – 2012-04-12 16:07:43