这是我最近在一次采访中提出的一个问题,即候选人希望看到添加到Java语言中的问题.它通常被认为是一种痛苦,Java没有具体化的仿制药,但是,当被推动时,候选人实际上无法告诉我他在那里可能取得的那些事情.
显然因为原始类型在Java中是允许的(以及不安全的检查),所以可以颠覆泛型并最终List<Integer>得到(例如)实际包含Strings.如果类型信息具体化,这显然是不可能的; 但必须有更多!
人们可以发布他们真正想要做的事情的例子,是否有可用的具体化的泛型?我的意思是,显然你可以List在运行时得到一个类型- 但是你会用它做什么?
public <T> void foo(List<T> l) {
   if (l.getGenericType() == Integer.class) {
       //yeah baby! err, what now?
编辑:对此的快速更新,因为答案似乎主要是关注需要传入Class一个参数(例如EnumSet.noneOf(TimeUnit.class)).我正在寻找更多的东西,这是不可能的.例如:
List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
    l1.addAll(l2); //why on earth would I be doing this anyway?
我不明白通用阵列创建的错误.
首先我尝试了以下内容:
  public PCB[] getAll() {
       PCB[] res = new PCB[list.size()];
           for (int i = 0; i < res.length; i++) {
               res[i] = list.get(i);
            }
       list.clear();
       return res;
}
然后我尝试这样做:
PCB[] res = new PCB[100];
我必须遗漏一些似乎正确的事情.我试着查一下,我真的做到了.没有任何东西在点击.
我的问题是:我该怎么做才能解决这个问题?
错误是:
 
.\Queue.java:26: generic array creation
PCB[] res = new PCB[200];
            ^
Note: U:\Senior Year\CS451- file      
uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
工具已完成,退出代码为1