java - 如何在 Java 中编写一个传入类名的函数?

标签 java function

我有下面的一段代码。

    Fragment emptyViewFragment;
    Fragment songListingFragment;

    // .... and various codes ...

    if (emptyViewFragment == null) {
        emptyViewFragment =
                (EmptyViewFragment) getFragmentManager().findFragmentByTag(EmptyViewFragment.TAG);
        if (emptyViewFragment == null) {
            emptyViewFragment = new EmptyViewFragment();
        }
    }
    addFragment(emptyViewFragment, EmptyViewFragment.TAG);

    if (songListingFragment == null) {
        songListingFragment =
                (SongListingFragment) getFragmentManager().findFragmentByTag(SongListingFragment.TAG);
        if (songListingFragment == null) {
            songListingFragment = new SongListingFragment();
        }
    }
    addFragment(songListingFragment, SongListingFragment.TAG);

这两段 if-else 代码看起来非常相似,我正在考虑从中创建一个函数,这样我就可以编写如下代码:-

    EmptyViewFragment emptyViewFragment;
    SongListingFragment songListingFragment;

    // .... and various codes ...

    createFragment(emptyViewFragment, EmptyViewFragment);
    createFragment(songListingFragment, SongListingFragment);

甚至更好(因为第二个参数是对象类型中传递的第一个参数)。

    EmptyViewFragment emptyViewFragment;
    SongListingFragment songListingFragment;

    // .... and various codes ...

    createFragment(emptyViewFragment);
    createFragment(songListingFragment);

我的createFragment函数应该怎么写?

最佳答案

也许是这样的

private void a (Fragment frag, Class<? extends Fragment> clazz, String tag) {
    if (frag == null) {
        frag = getFragmentManager().findFragmentByTag(tag);
        if (frag == null) {
            try {
                frag = clazz.newInstance();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    addFragment(frag);
}

可以访问里面的tag属性,也可以删除tag参数

更新

我现在无法测试,但我认为你可以通过这种方式访问​​静态成员TAG

private void a (Fragment frag, Class<? extends Fragment> clazz) {

    try {
        if (frag == null) {

            frag = getFragmentManager().findFragmentByTag(clazz.getField("TAG").get(null).toString());

            if (frag == null) {
                frag = clazz.newInstance();
            }
        }
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    }
    addFragment(frag);
}

关于java - 如何在 Java 中编写一个传入类名的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33823655/

相关文章:

php - 无法在 exit() 中调用函数

使用 ARM 编译器时的 C 死代码检测

javascript - argument.slice() 应该在 ES5 中工作吗?

java - Android 中频繁更改 View 的最佳方法?

java - 将线程局部值保存在静态最终字段中是一个坏习惯吗?

java - Spring Java Maven项目+模块设计

java - Android 媒体文件长度

javascript - 使用参数重命名函数而不重写它们 - Javascript

php - 有没有办法检查类中是否存在函数?

对象中大写字符串值的 Java Lambda 表达式