2012-04-12 72 views
0

我写了一个非常简单的类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); 

不知道我在这里做错了什么,任何帮助,将不胜感激。

回答

4
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)); 

这需要在方法,构造函数或静态块中,而不仅仅是在类中。它与泛型无关。

+0

在一个叫做主静态方法:“公共静态无效的主要(字串[] args)” – Luciano 2012-04-12 16:06:43

+0

谢谢你..不知道我怎么忽略了。 – 2012-04-12 16:07:43

0

您必须在方法或块中使用此代码,否则您无法在此处制作它。即

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)); 
     } 


}