【发布时间】:2017-11-09 09:19:24
【问题描述】:
我有一个名为 Router 的类,它负责与 Retrofit 的接口。所以这里是所有核心方法。然后我有一个名为 ConfigurableRouter 的抽象类(它扩展了路由器),它允许我配置我的路由器。现在我希望我可以创建具有不同默认值的 ConfigurabelRouter 的子级(实际上它是一个抽象类)。
这是一个如何工作的示例:
Router.configure(M_Rout.class)
.setPath("close-pi")
.setParams(params)
.setRequestMethod(Router.RequestMethod.POST)
.setIsAuthRequested(true)
.setCallback(new RequestResponse() {
@Override
protected void onSuccess(HashMap<String, String> responseItems) {}
@Override
protected void onGeneralError(int responseCode) {}
@Override
public void onFailure() {}
})
.sendRequest(getActivity());
这就是 Router.configure() 方法的工作原理:
public static ConfigurableRouter configure(Class<? extends ConfigurableRouter> aClass){
ConfigurableRouter configurableRouter = null;
try {
configurableRouter = aClass.newInstance();
//obj is a newly created object of the passed in type
} catch (Exception ignored) { }
return configurableRouter;
}
这是一个 ConfigurableRouter 方法的例子:
public ConfigurableRouter setParams(HashMap<Stthring, Object> params){
super.setRouterParams(params);
return this;
}
这是 M_Router 类:
public class M_Rout extends ConfigurableRouter {
@Override
public String setBasepath() {
return "www.xxxxxxx.xx/";
}
@Override
public String setInDebigBasePath() {
return "www.debugxxxxxxx.xx/";
}
@Override
public boolean isDebugging() {
return false;
}
@Override
public RequestMethod setDefultRequestMethod() {
return RequestMethod.POST;
}
@Override
public RequestResponse setDefultResponse() {
return new RequestResponse() {
@Override
protected void onSuccess(HashMap<String, String> responseItems) {
Log.d("RouterLog", "PigSUCSESSSpig");
}
@Override
protected void onGeneralError(int responseCode) {
}
@Override
public void onFailure() {
}
};
}
@Override
public ConfigurableRouter setAuthToken(String authToken) {
return super.setAuthToken("tokenExample");
}
public void setIsAuthRequested(boolean b){
//
}
}
现在我的问题是我无法访问 M_Router 类中的非覆盖方法,例如 setIsAuthRequested(),即在第一个 sn-p 中。我不知道我该怎么做..尝试了不同的方式,但没有。我该怎么办?
【问题讨论】:
-
如果你将它声明为父类的类型,你将被限制为父类提供的功能。
-
是的,我知道.. 但是在一个项目中,我可以有不同的类,如 M_Router,具有所有不同的默认值,而不仅仅是一次
-
所以不要在你的抽象方法中声明更多的方法。
-
意思是说:所以不要将它声明为你的抽象类的类型,或者在你的抽象类中声明更多的方法
-
是的,我明白了。那么这是唯一的解决方案吗?我还能做什么?
标签: java class abstract-class parent-child