当前位置: 首页 > 面试题库 >

为什么我不能显式地将类型参数传递给泛型Java方法?

闾丘成礼
2023-03-14
问题内容

我定义了一个Java函数:

static <T> List<T> createEmptyList() {
    return new ArrayList<T>();
}

一种调用方式是这样的:

List<Integer> myList = createEmptyList(); // Compiles

为什么不能通过显式传递泛型类型参数来调用它?:

Object myObject = createEmtpyList<Integer>(); // Doesn't compile. Why?

Illegal start of expression从编译器得到错误。


问题答案:

当Java编译器无法自行推断静态方法的参数类型时,您始终可以使用完整的合格方法名称Class来传递它。<类型> method();

Object list = Collections.<String> emptyList();


 类似资料:
  • 问题内容: 问题摘要: 我想将具有类型参数(例如)的类作为类型参数传递给泛型方法。 假设我有一个方法: 当然,此方法对于任何类型的类都可以正常使用。我可以这样调用该方法,例如: 问题: 我发现我不能这样做: 从句法上讲,这显然是无效的。但是,我不确定如何实现这样的目标。我当然可以通过,但是泛型类型的添加使其在语法上不再有效,并且我想不出解决方法。 唯一的直接解决方案是这样的事情(看起来很愚蠢):

  • 问题总结:我想传递一个带有类型参数(如

  • 我写了以下方法 我如何将不同的枚举类型传递给第二个参数?我知道我不能创建枚举的实例,但初始化枚举意味着我将传递一个值,而不是整个初始化的枚举,如下所示...其他枚举也将传递给相同的方法以实现组合细节

  • 问题内容: 我正在使用泛型编写某些东西,令我惊讶的是,我发现这行不通: 那我不能实例化泛型吗?没有任何方法可以做到这一点吗? 问题答案: 是的,这真是令人讨厌。 我使用的解决方法是强制客户端在构造新类时传递类-即 然后您可以使用。

  • 问题内容: 当实例化ArrayList时,我习惯于看到这样的代码 要么 但是今天我遇到了一个类似ArrayList的实例: 这是怎么回事,为什么会给出“不安全操作”的编译警告? 问题答案: 编辑: 是的,找到了参考。参见JLS§15.12.2.1-确定潜在适用方法: 如果方法调用包括显式类型参数,并且成员是泛型方法,则类型参数的数量等于方法的类型参数的数量。 此子句暗示 非泛型方法可能潜在地适用于

  • int是byte、short、int、long的默认文字,然后是为什么byte c=15被接受而不进行强制转换,但不接受方法参数。 提前谢谢你。