<;T、 U扩展T>;在java函数声明中

<;T、 U扩展T>;在java函数声明中,java,generics,methods,Java,Generics,Methods,我看到: public static <T,U extends T> AutoBean<T> getAutoBean(U delegate) 公共静态自动bean getAutoBean(U委托) 我知道输入类是U型的,AutoBean类是T型的,U扩展T是边界。但是它只是声明了方法处理的类型。也就是说,它基本上必须首先声明泛型类型名,然后在签名中使用它们表示类型U必须扩展类型T。例如,这些类型可以用来代替T和U class TType { } class UType

我看到:

public static <T,U extends T> AutoBean<T> getAutoBean(U delegate)
公共静态自动bean getAutoBean(U委托)

我知道输入类是U型的,AutoBean类是T型的,U扩展T是边界。但是它只是声明了方法处理的类型。也就是说,它基本上必须首先声明泛型类型名,然后在签名中使用它们
表示类型
U
必须扩展类型
T
。例如,这些类型可以用来代替
T
U

class TType { }
class UType extends TType { }
至于该方法将返回的自动bean的类型是什么。
还请注意,输入参数type
必须扩展type
才能调用该方法。

正如lbolit所说,声明了方法处理的内容,即在本例中,返回类型为T,参数U是T的子类。

声明了静态方法的类型参数。此方法有两个类型参数,一个是类型
T
,另一个是扩展第一个类型的类型
U

当您显式指定类型参数的绑定(如中所示)时,这些可能会有所不同

AutoBean<Object> autoBean = Foo.<Object, String>getAutoBean("delegate");
AutoBean AutoBean=Foo.getAutoBean(“委托”);

假设
getAutoBean
是类
Foo

的成员,您是否有意分组
否,我只是想问一下U前面的T在括号中扩展了T。声明可能会有所改进,比如
AutoBean签名相当于
公共静态AutoBean getAutoBean(T delegate)
。不需要
U
。谢谢!我认为publicstaticstring足以说明返回类型是String。我不知道我需要一个额外的before字符串(如我最初的问题中所述,如果要这样做,那么不妨将其声明为
公共静态字符串myFunction(AutoBean arg)
@Ibolit抱歉,但是您知道“您的方法处理的类型”的解释吗?直到现在,我一直认为,任何方法都处理它的参数,并从括号中的类型声明中知道它们的类型(如
method(String arg1)
)@malte很抱歉,我无法为您提供100%准确的答案,但在上面的示例中,类型实际上是未知的,它不是AutoBean,但它是由其他东西参数化的AutoBean。我们还不知道是什么,t不是类型,它是变量的近亲。如果它是在类声明中声明的,我们就不需要它出现在返回类型之前的方法声明中。我相信会有更好的解释。
UType uType = new UType();
AutoBean<TType> autobean = getAutoBean(uType);
AutoBean<Object> autoBean = Foo.<Object, String>getAutoBean("delegate");