在我们的代码库中,我看到了以下代码片段,我无法弄清楚它是什么(这就是为什么,我无法开始搜索更多信息)。代码段如下;
TypedId.< UserGroupsVO > valueOf( 1000L )
有关更多说明,TypedId类的定义如下:
public final class TypedId< T > implements Serializable, Comparable< TypedId< T >>
在哪个主题下可以了解更多有关此语法及其含义的信息?
评论之后,我需要澄清我的问题。在我的问题中,我不是指泛型。部分,我不明白是TypedId与&lt; ...&gt;之间的关系。并且在&lt; ...&gt;之间存在空格。与valueOf
。
答案 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参考: