gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:53:12 24 4
gpt4 key购买 nike

我有下面的一段代码。

    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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com