Java泛型:多个泛型参数?
我想知道是否有可能编写一个接受多种通用类型的函数,如下所示:
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)
请注意,在上面的签名中,我已经声明了类型S
以及T
签名本身。因此,它们不同于并独立于与包含该函数的类或接口相关联的任何泛型类型。
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);
不确定int
从函数返回an 的意义是什么,尽管您可以根据需要这样做!
以上是 Java泛型:多个泛型参数? 的全部内容, 来源链接: utcz.com/qa/430055.html