In my Android project I have made an abstract AsyncTask class in which I input the URL and if needed paging information so I don\'t need to keep writing the HTTP stuff etc.<
You cannot do it without a warning. You are casting an Object
to some other class, and even if the Object
is an instance of ArrayList
you don't know it's generic type.
Update:
if you wrote SuperCoolAsyncTask
yourself, you could parametrize the class with generics:
public abstract class SuperCoolAsyncTask<ResultType> {
protected abstract void onAsyncTaskResult(ResultType o);
}
And then, when you invoke your code:
new SuperCoolAsyncTask<ArrayList<MyItem>>() {
@Override
protected void onAsyncTaskResult(ArrayList<MyItem> o) {
AppConstants.scoreStatistics = o;
}
}.execute(get_url_score_statistics());
You can cast your object to ArrayList. you can't cast it to your type
You can't avoid the warning, but you can hide it with a @SuppressWarnings
annotation. Try this:
new SuperCoolAsyncTask() {
@Override
@SuppressWarnings("unchecked")
protected void onAsyncTaskResult(Object o) {
if(o instanceof ArrayList) {
//generates warning in the following line
AppConstants.scoreStatistics = (ArrayList<MyItem>)o;
}
}
}.execute(get_url_score_statistics());
The other option, if you're really worried about type safety, is to leave the generic unspecified (i.e. only cast to ArrayList, not ArrayList, and then cast each element as you remove it.