解释Java扩展...&尖括号中的语法

时间:2013-02-13 16:58:40

标签: java generics

老实说,我不知道谷歌的用途:

public static <T extends Fragment & OnClickListener> SomeListFragment instantiate(
        T target, int requestCode, DataSource<ResultItem> dataSource, int position) {

    SomeListFragment fragment = new ExposeListFragment();

    return fragment;
}

它位于SomeListFragment类中。 我确实理解这是一个返回SomeListFragment的静态方法(作为新的SomeListFragment()的替代),但是括号中的内容是什么?

<T extends Fragment & OnClickListener>

3 个答案:

答案 0 :(得分:1)

这是使用Generics的代码。

在这种情况下,您可以将SomeListFragment foo声明为SomeListFragement<T> foo,其中T是实现接口FragmentOnClickListener的类。然后,当您调用instantiate时,为target类型的T参数传入一个Object。

答案 1 :(得分:0)

括号中的内容定义了泛型类型T,它用作目标参数的类型。它说类型T可以是扩展Fragment类并实现OnClickListener接口的任何类型。

Google Java Generics for docs。

答案 2 :(得分:0)

小心! SomeListFragment在这里没有通用参数!唯一的参数化类型是T target引用。程序员决定这个target引用应该同时实现FragmentOnClickListener接口(尽管他没有调用/使用方法体内target的任何方法)。 / p>

由于它是静态方法,因此这是执行此操作的唯一方法。无法使用泛型参数声明类,因为它总是与实例绑定。