相关疑难解决方法(0)

我为什么要关心Java没有具体化的泛型?

这是我最近在一次采访中提出的一个问题,即候选人希望看到添加到Java语言中的问题.它通常被认为是一种痛苦,Java没有具体化的仿制药,但是,当被推动时,候选人实际上无法告诉我他在那里可能取得的那些事情.

显然因为原始类型在Java中是允许的(以及不安全的检查),所以可以颠覆泛型并最终List<Integer>得到(例如)实际包含Strings.如果类型信息具体化,这显然是不可能的; 但必须有更多!

人们可以发布他们真正想要做的事情的例子,是否有可用的具体化的泛型?我的意思是,显然你可以List在运行时得到一个类型- 但是你会用它做什么?

public <T> void foo(List<T> l) {
   if (l.getGenericType() == Integer.class) {
       //yeah baby! err, what now?
Run Code Online (Sandbox Code Playgroud)

编辑:对此的快速更新,因为答案似乎主要是关注需要传入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?
Run Code Online (Sandbox Code Playgroud)

java generics reification

101
推荐指数
10
解决办法
1万
查看次数

错误:通用阵列创建

我不明白通用阵列创建的错误.
首先我尝试了以下内容:

  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;
}
Run Code Online (Sandbox Code Playgroud)


然后我尝试这样做:

PCB[] res = new PCB[100];
Run Code Online (Sandbox Code Playgroud)


我必须遗漏一些似乎正确的事情.我试着查一下,我真的做到了.没有任何东西在点击.


我的问题是:我该怎么做才能解决这个问题?


错误是:

.\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
Run Code Online (Sandbox Code Playgroud)

工具已完成,退出代码为1

java arrays generics class object

34
推荐指数
2
解决办法
9万
查看次数

标签 统计

generics ×2

java ×2

arrays ×1

class ×1

object ×1

reification ×1