简体   繁体   English

Java泛型类作为方法参数

[英]Java Generics Class as method parameter

I have a TabListener in Android defined in this way: 我在Android中以这种方式定义了TabListener:

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

An I have this source code: 我有这个源代码:

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

Now I want to put this into a method: 现在,我想将其放入方法中:

addTab("Home", ???);

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

What I have to fill in instead of ??? 我必须填写而不是??? ?

Your tab listener needs the type parameter to be a subclass of Fragment 您的标签页侦听器需要将type参数作为Fragment的子类

public static class TabListener<T extends Fragment>

Therefore, you need to make sure it is the case in your code 因此,您需要确保代码中确实如此

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
                ));
    ...
}
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
            ));
    ...
}

Something like this is probably what you're looking for: 您可能正在寻找这样的东西:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM