Skip to content

Instantly share code, notes, and snippets.

@cattaka
Created May 14, 2016 11:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cattaka/f13db99cf6a68ac7dd8a01686d304ab0 to your computer and use it in GitHub Desktop.
Save cattaka/f13db99cf6a68ac7dd8a01686d304ab0 to your computer and use it in GitHub Desktop.
public class LearnGenerics {
static abstract class AbsRecursive<A extends AbsRecursive<A, T>, T> {
RecursiveListener<A, ? super T> mListener;
T mItem;
public <XA extends AbsRecursive<XA, ? super T>>
void setListener(RecursiveListener<? super XA, ? super T> listener) {
// FIXME: I could not fix this.
@SuppressWarnings("unchecked")
RecursiveListener<A, ? super T> l = (RecursiveListener<A, ? super T>) listener;
mListener = l;
}
public void doHoge() {
mListener.onHoge(getSelf(), mItem);
}
public abstract A getSelf();
}
static class Recursive<T> extends AbsRecursive<Recursive<T>, T> {
@Override
public Recursive<T> getSelf() {
return this;
}
}
static class StrRecursive extends Recursive<String> {
}
static class ObjRecursive extends Recursive<Object> {
}
static class RecursiveListener<A extends AbsRecursive<A, T>, T> {
public void onHoge(A adapter, T object) {
}
}
void doRecursive() {
ObjRecursive objRecursive = new ObjRecursive();
StrRecursive strRecursive = new StrRecursive();
RecursiveListener<Recursive<Object>, Object> objListener = new RecursiveListener<>();
RecursiveListener<Recursive<String>, ? super String> strListener = new RecursiveListener<>();
objRecursive.setListener(objListener);
strRecursive.setListener(strListener);
strRecursive.setListener(objListener);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment