如何避免泛型警告

ddy*_*yer 2 java generics

我有一个实用程序函数,它将随机播放任何Vector的元素,但会生成有关使用原始类型的一般警告.

static public void shuffle(Random r,Vector v)
   {    int sz = v.size();
        for(int pass = 0;pass<4;pass++)
        {   for(int i=0;i<sz;i++)
            { int j=nextInt(r,sz);
              Object ii = v.elementAt(i);
              v.setElementAt(v.elementAt(j),i);
              v.setElementAt(ii,j);
            }
        }
  }
Run Code Online (Sandbox Code Playgroud)

似乎除了通过压制它们之外似乎没有办法安静警告.更改方法签名以Vector<Object> 限制调用者Vector<Object>.更改为Vector<?>使setElementAt 无法编译.

aio*_*obe 8

首先你应该注意到你正在重新发明轮子.

Collections.shuffle(yourVector, yourRandom);

诀窍:-)


为了使您的方法对所有类型的Vectors 都通用,这是编写它的方法:

static public <T> void shuffle(Random r, Vector<T> v) {
    int sz = v.size();
    for (int pass = 0; pass < 4; pass++) {
        for (int i = 0; i < sz; i++) {
            int j = nextInt(r, sz);
            T ii = v.elementAt(i);
            v.setElementAt(v.elementAt(j), i);
            v.setElementAt(ii, j);
        }
    }
},
Run Code Online (Sandbox Code Playgroud)