当前位置:  开发笔记 > 编程语言 > 正文

你如何处理java中的"超级"泛型?

如何解决《你如何处理java中的"超级"泛型?》经验,为你挑选了1个好方法。

采用以下泛型示例

import java.util.List;
import java.util.ArrayList;

public class GenericsTest {
    private List myList;

    public static void main(String args[]) {
        new GenericsTest(new ArrayList()).add(new Dog());
    }

    public GenericsTest(List list) {
        myList = list;
    }

    public void add(Animal a) {
      myList.add(a);
    }

    public interface Animal {}
    public static class Dog implements Animal {}
    public static class Cat implements Animal {}
}

它工作正常.但是如你所知,你不能用它构建它

new GenericsTest(new ArrayList());

因为,如你所知,add(Animal)可以添加Cats.该建议解决这个问题的方法,即使用通配符也不管用,因为,是的,你可以改变每一个ListList却有着同样的问题:你可以创建GenericsTestList再添加Dog秒.

所以我的问题是:有没有一种方便的方法来编写这个类一次,然后将它用于所有可能的Animals?当然它应该直接解决上述问题.



1> Greg Cottman..:

如果我理解你要做什么,那么你需要将泛型类型放在类级别:

public class GenericsTest
{
  private List myList;

  public static void main(String args[])
  {
    new GenericsTest(new ArrayList());
  }

  public GenericsTest(List list)
  {
    myList = list;
  }

  public void add(T a)
  {
    myList.add(a);
  }
}

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有