Java 8中的新类型转换或我犯了错误?

时间:2014-04-17 14:23:36

标签: java casting type-conversion

我在一些与JavaFX相关的代码中看到了一种新的类型转换形式。奇怪的是它的功能类似于类型转换,但我找不到它under the categories of casting in Java 8 Specifications。这是一个例子:

    FXMLLoader loader = new FXMLLoader(getClass().getResource("tabs/tabbedWin.fxml"));
    TabbedWinController twc1 = loader.<TabbedWinController>getController();
    TabbedWinController twc2 = (TabbedWinController) loader.getController();

最后两行看起来做同样的工作,但我想知道twc1前面的语法是什么意思?这对我来说是全新的。

如果是类型转换,为什么我不能使用像int i = <Integer> f;这样的语句,其中f是一个浮点变量?

所以我很想知道它是什么?从什么时候添加到Java?我应该/可以/不应该使用它?

2 个答案:

答案 0 :(得分:1)

它与JavaFX无关,该形式的方法称为泛型方法,与投射无关。

所以当你写

loader.<TabbedWinController>getController();

这意味着您希望getController()返回TabbedWinController类型的对象。

答案 1 :(得分:1)

这是您为static方法指定泛型类型的方式。自从泛型在Java 5中发布以来,它就已经可用了。

List<String> emptyListOfStrings = Collections.<String> emptyList();

在您的情况下,两个表单都可以正常工作,因为getController方法返回指定泛型类型的对象。

请参阅here进行讨论。