是的-可能的(虽然不是使用方法签名),是的,使用签名的类型必须相同。
使用给定的签名,
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 的意义是什么,尽管您可以根据需要这样做!



