java函数声明中<t,u =“”extends =“”t =“”>的含义</t,>

时间:2013-03-19 03:37:33

标签: java generics methods

我看到了这个:

public static <T,U extends T> AutoBean<T> getAutoBean(U delegate)

我知道输入类是U类型,AutoBean类是T类型,U扩展T是边界。但是<T,在这里意味着什么?

另外,如果我要编写一个接受getAutoBean输出的函数,你会如何编写函数声明? (即myFunction(getAutoBean(...)),myFunction()的函数声明是什么?)

谢谢!

5 个答案:

答案 0 :(得分:4)

<T>是方法返回的AutoBean的类型。 另请注意,输入参数类型<U>必须扩展类型<T>才能调用该方法。

答案 1 :(得分:4)

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

当您在

中明确指定类型参数的绑定时,这些可能会有所不同
AutoBean<Object> autoBean = Foo.<Object, String>getAutoBean("delegate");

假设getAutoBean是班级Foo的成员。

答案 2 :(得分:3)

它只声明您的方法处理的类型。也就是说,它基本上必须首先声明泛型类型名称,然后才在签名中使用它们。 <T本身并不意味着什么,但是尖括号内的字母表示“这是我将在方法中使用的类型”。

关于“myFunction()”使用getAutoBean(...)的输出:

public static  <T> String myFunction(AutoBean<T> arg){ // If you return a generic type object, you will also have to declare it's type parameter in the first angular brackets and in angular brackets after it.
    // do work here
}

答案 3 :(得分:2)

这意味着类型U必须扩展类型T。例如,可以使用这些类型代替TU

class TType { }
class UType extends TType { }

至于<T,的含义,它声明了在函数中使用的泛型类型。以下是示例用法:

UType uType = new UType();
AutoBean<TType> autobean = getAutoBean(uType);

答案 4 :(得分:2)

正如lbolit所说,声明你的方法处理什么,即在这种情况下返回类型T和U的参数,它是T的子类。