我看到了这个:
public static <T,U extends T> AutoBean<T> getAutoBean(U delegate)
我知道输入类是U类型,AutoBean类是T类型,U扩展T是边界。但是<T,
在这里意味着什么?
另外,如果我要编写一个接受getAutoBean输出的函数,你会如何编写函数声明? (即myFunction(getAutoBean(...)),myFunction()的函数声明是什么?)
谢谢!
答案 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
。例如,可以使用这些类型代替T
和U
。
class TType { }
class UType extends TType { }
至于<T,
的含义,它声明了在函数中使用的泛型类型。以下是示例用法:
UType uType = new UType();
AutoBean<TType> autobean = getAutoBean(uType);
答案 4 :(得分:2)
正如lbolit所说,声明你的方法处理什么,即在这种情况下返回类型T和U的参数,它是T的子类。