我不想硬连接类名并使用instanceOf
但是动态识别类
让我说我有
// add fragments
mFragments = new ArrayList<Fragment>();
mFragments.add(Fragment.instantiate(this, class1.class.getName()));
mFragments.add(Fragment.instantiate(this, class2.class.getName()));
public class class1 extends SherlockListFragment{
public static final String TAG = "class1";
}
所有类都有extends
SherlockActivity或SherlockListFragment,因此它们具有公共基类Fragment
。我现在怎样才能通过数组迭代得到例如static
标记或其他可在不使用Class
的情况下识别instanceOf
的标记。我有一些想法,但想得到一些输入,所以我可以学习
public static final String TAG = "class1"
答案 0 :(得分:2)
在基类中添加一个返回标记的方法。然后遍历您的结构并获取每个子类型的标记。
public class SherlockListFragment{
public String getTag(){
return TAG;
}
}
您无需确定类的确切子类型。每当你开始遇到像这样的奇怪问题时,我建议先重新设计,而不是找工作。
答案 1 :(得分:1)
在Fragment
课程中有一个方法如下:
public class Fragment {
...
public String getTag() {
return this.getClass().getCanonicalName();
}
}
public class Fragment1 extends Fragment {
...
}
public class Fragment2 extends Fragment {
...
}
现在,我使用下面的简单代码对其进行了测试:
Fragment f = new Fragment1();
Fragment f1 = new Fragment2();
System.out.println(f.getTag());
System.out.println(f1.getTag());
提供输出:
Fragment1
Fragment2