我看到了这个:
public static <T,U extends T> AutoBean<T> getAutoBean(U delegate)
我知道输入类是 U 类型,AutoBean 类是 T 类型,U extends T 是边界。但<T,
这里的意思是什么?
另外,如果我要编写一个函数来接受 getAutoBean 的输出,你会如何编写函数声明?(即myFunction(getAutoBean(...)),myFunction()的函数声明会是什么?)
谢谢!
它只是声明您的方法处理的类型。也就是说,它基本上必须先声明泛型类型名称,然后才能在签名中使用它们。<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
}
<T>
是将由方法返回的 AutoBean 的类型。另请注意,输入参数类型<U>
必须扩展类型<T>
才能调用该方法。
<T,U extends T>
正在声明静态方法的类型参数。此方法有两个类型参数,一个 typeT
和一个U
扩展第一个类型的第二个类型。
当您显式指定类型参数的绑定时,这些可能会有所不同,如
AutoBean<Object> autoBean = Foo.<Object, String>getAutoBean("delegate");
假设getAutoBean
是类的成员Foo
。
这意味着类型U
必须扩展类型T
。例如,这些类型可以用来代替T
and U
。
class TType { }
class UType extends TType { }
至于什么<T,
意思,它是声明要在函数中使用的泛型类型。这是示例用法:
UType uType = new UType();
AutoBean<TType> autobean = getAutoBean(uType);
正如 lbolit 所说,声明你的方法处理什么,即在这种情况下返回类型为 T 和参数 U 是 T 的子类。