有趣语法的含义

时间:2017-03-02 12:16:48

标签: java

在我们的代码库中,我看到了以下代码片段,我无法弄清楚它是什么(这就是为什么,我无法开始搜索更多信息)。代码段如下;

TypedId.< UserGroupsVO > valueOf( 1000L )

有关更多说明,TypedId类的定义如下:

public final class TypedId< T > implements Serializable, Comparable< TypedId< T >>

在哪个主题下可以了解更多有关此语法及其含义的信息?

修改

评论之后,我需要澄清我的问题。在我的问题中,我不是指泛型。部分,我不明白是TypedId与&lt; ...&gt;之间的关系。并且在&lt; ...&gt;之间存在空格。与valueOf

2 个答案:

答案 0 :(得分:4)

静态方法valueOf

public static <T> TypedId<T> valueOf(long aValue) ...
              ^^^

具有泛型类型参数T。这意味着当您致电TypedId.valueOf(...)时,您还可以指定通用类型T。这是通过

完成的
TypedId.<UserGroupsVO>valueOf(...)
        ^^^^^^^^^^^^^^

代码TypedId.< UserGroupsVO >valueOf中的空格只是装饰性的:它们不会影响其含义。

请注意,这不是因为TypedId是通用。泛型类可以具有非泛型静态方法;非泛型类可以有一个通用的静态方法。

例如,这是一个带有通用静态方法的非泛型类。

class Foo {
     public static <T> List<T> makeList() ...
}
...
Foo.<String>makeList(); // call with a generic type parameter

这是一个带有非泛型静态方法的泛型类。

class Bar<T> {
     public static void doThing() ...
}
...
Bar.doThing(); // call without a generic type parameter

答案 1 :(得分:2)

TypedId< T >是一个定义类型T的通用类。

在这个类中,您可能有一个使用类型参数TypeId<T> valueOf的方法T。此方法称为通用方法。

这样您就可以避免使用限制性更强的有界通配符。 例如:<? extends E>是一个有界的通配符。

当您致电TypedId.< UserGroupsVO > valueOf( 1000L )时,您明确定义类型参数T将为UserGroupsVO

JLS参考: