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

异常的通用语法:数组。asList(...)

帅雅逸
2023-03-14
问题内容

我发现了“不寻常”的通用语法,例如:

Arrays.<String>asList(...);
Collections.<String>emptyList();

显然,这些方法的结果是通用的。这样的语法用于类型检查吗?一个Object阵列不能为一个参数Arrays.<String>asList(...)


问题答案:

<typearg>methodname 是用于显式指定泛型方法的类型参数的语法

使用泛型类时,通常必须指定type参数(例如String):

ArrayList<String> list =  new ArrayList<String>();

使用泛型方法时,通常不会传递类型参数:

public static <T> void foo(T param) {   }
...
String s = ...;
MyClass.foo(s);

您会注意到,没有代码在哪里明确指定我们想要的String版本foo,即没有<String>像使用通用类(List<String>)时那样指定明确的类型实参。

编译器正在做一些编译器魔术,以根据上下文推断泛型类型参数。这是一件伟大的事情,非常强大。

但是,有时编译器无法自动推断类型参数:

public static <T> void bar() { T myLocalVar = ...; ...  }
MyClass.bar();

bar我们尝试调用什么具体的版本,即此调用的类型参数是什么?不知道?好吧,编译器也没有。我们必须明确声明类型参数,就像我们通常使用泛型类时那样:

MyClass.<String>bar();

另请参阅:

  • http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedMethods.html#FAQ002
  • 那里还有许多其他好东西 http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

除了: 值得一提的是,Java 7将添加所谓的菱形运算符,以使我们现在也可以让编译器在使用泛型类时推断类型参数:

ArrayList<String> list =  new ArrayList<String>();

变成

ArrayList<String> list =  new ArrayList<>();

Java 7中的菱形运算符(<>)有什么意义?



 类似资料:
  • 本文向大家介绍Java 数组ArrayList常用语法详解,包括了Java 数组ArrayList常用语法详解的使用技巧和注意事项,需要的朋友参考一下 恶补基础,记录一下数组ArrayList的常用语法 1.导入 2.定义数组list ArrayList<类名> list = new ArrayList<类名>(); 不能是基本类型,必须是类 3.获取集合大小 size() 4.存入数据 add(

  • 问题内容: 我正在尝试为H2导入一个SQL脚本。该脚本由spring- batch提供,用于存储作业元数据。当我直接在H2控制台中执行此脚本时,没有语法错误,但是我在初始化阶段引用了Hibernate / JPA中要导入的相同脚本,却遇到了以下异常: 这是我要执行的脚本:https : //code.google.com/p/joshlong- examples/source/browse/tru

  • 我正打破我的头试图找出这里出了什么问题。我正在研究一个模式:它有一个故事实体(表:故事),我试图向这个stories.portofoliotype添加一个列_id它是PortfolioType的外键(表:portofolitype)。我想我有正确的注释,我甚至记录了MySQL查询,它得到了以下查询,这是正确的。我试图创建一个新的故事: 但hibernate失败,出现上述异常。代码如下: 故事JAV

  • 问题内容: 我正在尝试按字符分割字符串。但是我得到一个错误: 我不尝试使用正则表达式或任何东西。我尝试使用,它也行不通。 问题答案: 嗯…原因是将其参数字符串视为正则表达式。 现在,两者和在正则表达式中都是特殊字符。 因此,您必须跳过regex world的特殊字符以进行争论,像这样,

  • 上一节展示了如何为ListOfNumbers类中的writeList方法编写异常处理程序。 有时,它适合代码捕获可能发生在其中的异常。 但在其他情况下,最好让一个方法进一步推给上层来调用堆栈处理异常。 例如,如果您将ListOfNumbers类提供为类包的一部分,则可能无法预期包的所有用户的需求。 在这种情况下,最好不要捕获异常,并允许一个方法进一步推给上层来调用堆栈来处理它。 如果writeLi

  • 因此,我在android studio中编写登录和注册代码,让我粘贴到这里: 这是按钮按下的代码: 我得到以下异常: E/androidRuntime:致命异常:主进程:com.example.myapplication,PID:3980 Java . lang . illegalstateexception:无法执行Android的方法:onClick at Android x . app co