5

我看到了这个:

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

我知道输入类是 U 类型,AutoBean 类是 T 类型,U extends T 是边界。但<T,这里的意思是什么?

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

谢谢!

4

5 回答 5

4

它只是声明您的方法处理的类型。也就是说,它基本上必须先声明泛型类型名称,然后才能在签名中使用它们。<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
}

于 2013-03-19T03:38:52.443 回答
4

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

于 2013-03-19T03:41:37.410 回答
4

<T,U extends T>正在声明静态方法的类型参数。此方法有两个类型参数,一个 typeT和一个U扩展第一个类型的第二个类型。

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

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

假设getAutoBean是类的成员Foo

于 2013-03-19T03:42:40.340 回答
2

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

class TType { }
class UType extends TType { }

至于什么<T,意思,它是声明要在函数中使用的泛型类型。这是示例用法:

UType uType = new UType();
AutoBean<TType> autobean = getAutoBean(uType);
于 2013-03-19T03:40:50.507 回答
2

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

于 2013-03-19T03:42:28.497 回答