Java 泛型 : multiple generic parameters?

标签 java generics parameters

我想知道是否可以编写一个接受多种泛型类型的函数,如下所示:

public int void myfunction(Set<T> a, Set<T> b) {
    return 5;
}

Set<Integer> setA = new HashSet<Integer>();
Set<String> setB = new HashSet<String>();
int result = myfunction(setA, setB);

这行得通吗?每个参数中的泛型是否意味着每个参数必须具有与泛型相同的类型 T?

最佳答案

是的 - 有可能(尽管不是您的方法签名),是的,您的签名类型必须相同。

用你给的签名,T必须与调用站点的单一类型(例如 String Integer )相关联。但是,您可以声明采用多个类型参数的方法签名

public <S, T> void func(Set<S> s, Set<T> t)

请注意,在上面的签名中,我声明了类型 ST在签名本身。因此,它们与与包含该函数的类或接口(interface)相关联的任何泛型类型不同且独立。

public class MyClass<S, T> {
   public        void foo(Set<S> s, Set<T> t); //same type params as on class
   public <U, V> void bar(Set<U> s, Set<V> t); //type params independent of class
}

您可能想看看 java.util 中集合类的一些方法签名。包裹。泛型确实是一个相当复杂的主题,尤其是在考虑通配符( ? extends? super )时。例如,通常情况下,可能采用 Set<Number> 的方法作为参数还应该接受 Set<Integer> .在这种情况下,您会看到这样的签名:

public void baz(Set<? extends T> s);

已经有很多关于 SO 的问题供您查看!

不确定返回 int 的意义何在从功能上看,虽然你可以这样做!

关于Java 泛型 : multiple generic parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1759549/

相关文章:

java - 如何收集多个异步回调?

java - 为什么在某些情况下不需要对象实例化?

使用中的 Java 泛型类

java - Java泛型可以替代多个相似的类吗?

ios - 如果不应该,则可选绑定(bind)成功

variables - 我可以将 e.parameter 与全局变量结合使用来检索 Google Apps 脚本中的外部变量吗?

java - 从java中的main方法调用另一个方法

java - JDK 10 模块和 sun.security.provider.certpath.SunCertPathBuilderException

c - C语言中被调用(派生)函数如何访问调用者(基)函数的变量?

java - 构造函数中传递的参数 - Java