package cn.mutils.core.runtime;
import proguard.annotation.Keep;
import proguard.annotation.KeepClassMembers;
/**
* Delegate of framework
*
* @param <T>
*/
@SuppressWarnings("unchecked")
@Keep
@KeepClassMembers
public class Delegate<T extends Delegate> {
/**
* Delegate object
*/
protected T mDelegate;
public Delegate() {
setDelegate(this.classDelegate());
}
public T delegate() {
if (mDelegate != null) {
return mDelegate;
}
try {
return (T) this;
} catch (Exception e) {
return null;
}
}
public String classDelegate() {
return null;
}
public void setDelegate(String delegate) {
mDelegate = null;
if (delegate != null && !delegate.equals(this.getClass().getName())) {
try {
Class<T> c = (Class<T>) Class.forName(delegate);
mDelegate = c.newInstance();
} catch (Exception e) {
// ClassNotFoundException
}
}
}
}