是否可以ArrayList
从方法参数参数化一个?例如,我有一个从布局getAllViewsFromRoot(View root)
中检索所有内容的方法。Views
现在我想要一个在布局中获取所有 ProgressBars 的方法,所以我可以使用这个(工具包)方法:
public static ArrayList<ProgressBar> getAllProgressBars(View root) {
ArrayList<View> allviews = getAllViewsFromRoot(root);
ArrayList<ProgressBar> results = new ArrayList<ProgressBar>();
for (View view : allviews)
if (view instanceof ProgressBar)
results.add((ProgressBar)view);
return results;
}
但是由于我需要对不同类型的Views
. 我希望这会奏效,但它不会:
public static ArrayList<?> getViewsFromViewGroup(ViewGroup root, Class clazz) {
ArrayList<View> views = getAllViewsFromRoots(root);
ArrayList<View> result = new ArrayList<clazz>();
for (View view : views) {
if (clazz.isInstance(view.getClass())) {
result.add(view);
}
}
return result;
}
在其他地方我会打电话ArrayList<ProgressBar> pbs = Toolkit.getViewsFromViewGroup(root, ProgressBar.class)
。
换句话说,我可以指定如何使用方法参数对 ArrayList 进行强类型化吗?
我想要的任何一种可能吗?我不一定非常需要它,但我喜欢以通用的方式解决问题。
编辑
我已经设法让代码与下面的答案一起使用(感谢thkala)。我怀疑这实际上要容易得多。
public static <T> ArrayList<T> getViewsFromViewGroup(View root, Class<T> clazz) {
ArrayList<T> result = new ArrayList<T>();
for (View view : getAllViewsFromRoots(root))
if (clazz.isInstance(view))
result.add(clazz.cast(view));
return result;
}
因此,如果您想从布局中的某个点检索所有 ProgressBar,只需调用:
ArrayList<ProgressBar> myPbs = Toolkit.getViewFromViewGroup(myRootView, ProgressBar.class);