Java Generics Class作为方法参数

时间:2013-02-28 17:22:04

标签: java android generics

我在Android中有一个TabListener以这种方式定义:

public static class TabListener<T extends Fragment> 
    implements ActionBar.TabListener { ... }

我有这个源代码:

Tab myTab = myActionBar.
                newTab().
                setText("Home").
                setTabListener(new TabListener<MyFragment>(
                    this, 
                    "Home", 
                    MyFragment.class
                ));
...

现在我想把它放到一个方法中:

addTab("Home", ???);

private void addTab(String text, ???) {
    Tab myTab = myActionBar.
                newTab().
                setText(text).
                setTabListener(new TabListener<???>(
                    this, 
                    text, 
                    ???.class
                ));
    ...
}

我必须填写什么而不是???

3 个答案:

答案 0 :(得分:5)

您的标签监听器需要将type参数作为Fragment

的子类
public static class TabListener<T extends Fragment>

因此,您需要确保代码中的情况

addTab("Home", ???);

private <T extends Fragment> void addTab(String text, Class<T> clazz) {
    Tab myTab = myActionBar.
                newTab().
                setText(text).
                setTabListener(new TabListener<T>(
                    this, 
                    text, 
                    clazz
                ));
    ...
}

答案 1 :(得分:3)

addTab("Home", MyFragment.class);

private void addTab(String text, Class<? extends Fragment> clazz) {
    Tab myTab = myActionBar.
            newTab().
            setText(text).
            setTabListener(new TabListener<>(
                this, 
                text, 
                clazz
            ));
    ...
}

答案 2 :(得分:2)

这样的事情可能就是你要找的东西:

private <T> void addTab(String text, Class<T> clazz) {
    Tab myTab = myActionBar.
            newTab().
            setText(text).
            setTabListener(new TabListener<T>(
                this, 
                text, 
                clazz
            ));
    ...
}