繁体   English   中英

由通用ArrayList支持的Java通用类

[英]Java Generic class backed by Generic ArrayList

我写了一个叫做Sack的非常简单的类,它以不特定的顺序保存一些数据,实际的数据由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));    
}

这是每次调用add()时收到的错误:

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


}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM