ArrayList
メソッドパラメータからパラメータ化することは可能ですか?たとえば、レイアウトからgetAllViewsFromRoot(View root)
すべてを取得するメソッドがあります。Views
ここで、レイアウト内のすべてのProgressBarを取得するメソッドが必要なので、次の(ツールキット)メソッドを使用できます。
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);