gpt4 book ai didi

java - 通用方法语法 method()

转载 作者:行者123 更新时间:2023-12-01 17:08:00 26 4
gpt4 key购买 nike

我刚刚发现 Java 中可以实现以下功能:

我们有一个方法:

public <T> void doSomething( T value );

我们可以这样调用它:

this.doSomething( "Hello World" );

或者我们可以按照我刚刚发现的方式来调用它:

// Restricts the argument type to String
this.<String>doSomething( "Hello World" );

起初,我认为如果我们必须进行类比较,这可能会非常方便,因为我们知道 T 的类型。在编译时,但泛型不是运行时功能,因此这不起作用:

public <T> void doSomething( T value ) {
if ( field instanceof T ) ... // Not working
}

问题:

  • 为什么以及在哪里应该使用 this.<Type>method( ... )语法高于通常的 this.method( ... )语法?
  • 是否存在差异(参数的编译时类型限制除外)?

最佳答案

当由于某种原因无法自动推断类型时,该语法很方便。类似这样的情况还有很多。例如,如果返回值派生自泛型类型,并且它是更复杂表达式的一部分,则类型不明显。

示例:

<T> T someMethod(T o) {
return o;
}

Number res = (num == null) ? this.<Number>someMethod(null) : null;

如果没有特殊语法(无法编译),此示例将无法工作,因为无法在该表达式内推断类型。

另请注意,可以使用类似的语法来调用静态方法。例如,以下代码片段会导致编译错误:

Collection<Integer> getCollection() {
return someCondition ? Collections.emptyList() : Collections.singletonList(Integer.valueOf(42));
}

所以我们必须指定类型:

Collection<Integer> getCollection() {
return someCondition ? Collections.<Integer>emptyList() : Collections.singletonList(Integer.valueOf(42));
}

关于你的第二个问题:除了明确给出的泛型类型之外,没有其他区别。

关于java - 通用方法语法 <Type>method(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com