【问题标题】:Meaning of the interesting syntax [duplicate]有趣语法的含义[重复]
【发布时间】:2017-03-02 12:16:48
【问题描述】:

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

TypedId.< UserGroupsVO > valueOf( 1000L )

为了更清楚,TypedId类的定义如下;

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

在哪个主题下可以详细了解这种语法及其含义?

编辑

在 cmets 之后,我需要澄清我的问题。在我的问题中,我不是指泛型。我不明白的部分是TypedId与<...>之间的点,<...>与valueOf之间有一个空格。

【问题讨论】:

标签: java


【解决方案1】:

静态方法valueOf

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

有一个泛型类型参数T。这意味着当您调用TypedId.valueOf(...) 时,您还可以指定泛型类型T 是什么。这是通过

TypedId.<UserGroupsVO>valueOf(...)
        ^^^^^^^^^^^^^^

代码TypedId.&lt; UserGroupsVO &gt;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

【讨论】:

    【解决方案2】:

    TypedId&lt; T &gt; 是一个泛型类,它定义了一个类型T

    在这个类中,你可能有一个方法TypeId&lt;T&gt; valueOf,它使用类型参数T。这种方法称为泛型方法。

    这样可以避免使用限制性更强的有界通配符。 例如:&lt;? extends E&gt; 是有界通配符。

    当您调用TypedId.&lt; UserGroupsVO &gt; valueOf( 1000L ) 时,您明确定义类型参数T 将是UserGroupsVO

    JLS 参考:

    【讨论】:

    • 是的,valueOf的定义是public staticTypedIdvalueOf(long aValue)。谢谢顺便说一句+1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多