java - Java 中的类型参数

标签 java generics

下面两个声明有什么区别吗?

public<C extends Condition<E>> List<E> search (C condition)

public List<E> search (Condition<E> condition)

一个区别是显而易见的:在第一种情况下,C 可以在search 的主体中使用。但假设 search 正文中不会使用 C:还有什么区别吗?

最佳答案

不,没有什么有用的区别。区别可以简化如下。

<T> void m(T object)

void m(Object object)

尽管第一个可以调用 this.<String>m(42)它不会编译 - 但这没有任何值(value)。

当存在由其类型参数表达的某种关系时,泛型方法的值就出现了,例如:

<T> T giveItBackToMe(T object) {
    return object;
}

...

String s = giveItBackToMe("asdf");
Integer i = giveItBackToMe(42);

或者:

<T> void listCopy(List<T> from, List<? super T> to) {
    to.addAll(from);
}

...

List<Integer> ints = Arrays.asList(1, 2, 3);
List<Number> nums = new ArrayList<>();
listCopy(ints, nums);

关于java - Java 中的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19934304/

相关文章:

java - 缓存映射器输出

.NET 泛型 : Is it possible to enforce abstract class on generic type

java - 使用方法引用和原始类型进行类型推断

java - HSSFCell 读取空错误?

java - 将 tcpdump 添加到 Android 应用程序

java - 使用 CountDownTimer 在特定时间在 Firestore 上设置特定数据

java - 将 http 请求转发到将使用 java servlet 响应原始请求者的其他服务器

java - 为什么三元运算符不喜欢有界通配符的泛型类型?

java - 如何用 Jackson 解析嵌套数组?

C# 如何解决 Func<T, bool> 中的逆变问题?