我有一个听众:
public interface OnCompleteListener<T> {
void onComplete(T data);
}
我将它存储在列表中:
private List<OnCompleteListener<?>> mListeners = new ArrayList<>();
// ...
public void addType1Listener() {
addListener(new OnCompleteListener<Type1>() {
//...
}); }
public void addType2Listener(){ addListener(new OnCompleteListener(){ // ... }); }
private <T> void addListener(OnCompleteListener<T> listener) {
mListeners.add(listener);
}
我试图通过这种方式得到它:
public <T> OnRequestsCompleteListener<T> get(int i) {
return (OnRequestsCompleteListener<T>) mListeners.get(i);
}
Type1和Type2没有父类,也没有。 但我得到了“未经检查的演员”。警告。如何正确使用?
答案 0 :(得分:0)
不需要在方法中指定遗传T,而是需要具有通用T
的类public class ListenerCollection <T> {
private List<OnCompleteListener<T>> mListeners = new ArrayList<OnCompleteListener<T>>();
public void addListener(OnCompleteListener<T> listener) {
mListeners.add(listener);
}
public OnCompleteListener<T> get(int i) {
return mListeners.get(i);
}
}
假设您有一个类 OnRequestCompleteListener ,则实现OnCompleteListener<String>
。然后你做:
ListenerCollection<String> lcollection;
...........
OnRequestCompleteListener newListener = (OnRequestCompleteListener) lcollection.get(i);
没有任何警告。