- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这样的类中有一些方法:
@Override
public void sendRemoteRecord(String token, int channelId, int eventId, final ServiceCallback<RemoteRecordResponse> callback) {
epgServicesApiManager.sendRemoteRecord(token, channelId, eventId)
.observeOn(scheduler)
.subscribe(new Action1<RemoteRecordResponse>() {
@Override
public void call(RemoteRecordResponse model) {
if (callback != null)
callback.onSuccess(model);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (callback != null)
callback.onError();
}
});
}
@Override
public void activateRemoteRecord(String token, String cardNumber, final ServiceCallback<RemoteRecordActivateResponse> callback) {
epgServicesApiManager.activateRemoteRecord(token, cardNumber)
.observeOn(scheduler)
.subscribe(new Action1<RemoteRecordActivateResponse>() {
@Override
public void call(RemoteRecordActivateResponse remoteRecordActivateResponse) {
if (callback != null)
callback.onSuccess(remoteRecordActivateResponse);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
if (callback != null)
callback.onError();
}
});
}
是否可以删除observeOn()行之后代码周围的重复项?
令人烦恼的部分是确保在使用回调之前对它进行空检查。
目前,我知道本类(class)需要七种不同的方法,甚至可能更多。
最佳答案
不幸的是,在 Java 1.7 中,没有办法在不增加代码量的情况下解决这个问题。您可以通过引入一些辅助类来减少本地所需的代码量。
一种解决方案是将匿名内部类移至顶级类。从那里您可以在抽象类中引入一个虚拟回调和一些空检查工作。
它最终可能看起来像这样(水平规则用于突出显示这些类位于单独的文件中)。
<小时/>这是一个虚拟回调类,它什么也不做,但可以安全地调用。这将替换 null
值。
public class NullServiceCallBack<T> implements ServiceCallBack<T> {
@Override
public void onSuccess(T target) {}
@Override
public void onError() {}
}
<小时/>
这是一个处理验证的抽象类,将 null
值转换为 NullServiceCallback
的实例:
public abstract class CallBackAction<T> implements Action1<T> {
private final ServiceCallBack<T> Callback;
public CallBackAction(ServiceCallBack<T> callback) {
this.Callback = (null != callback) ? callback : new NullServiceCallBack<>();
}
protected ServiceCallBack<T> getCallback() {
return Callback;
}
}
<小时/>
这是您将用于成功的具体类。
public class SuccessCallbackAction<T> extends CallBackAction<T> {
public SuccessCallbackAction(ServiceCallBack<T> callback) {
super(callback);
}
@Override
public void call(T target) {
getCallback().onSuccess(target);
}
}
<小时/>
这是错误的具体类。这不会对调用的参数做任何事情,因此我们可以为 Object
实现一次并完成它。
public class ErrorCallbackAction extends CallBackAction<Object> {
public ErrorCallbackAction(ServiceCallBack<Object> callback) {
super(callback);
}
@Override
public void call(Throwable target) {
getCallback().onError();
}
}
<小时/>
所以最后,上面的示例应该如下所示:
@Override
public void sendRemoteRecord(String token, int channelId, int eventId, final ServiceCallback<RemoteRecordResponse> callback) {
epgServicesApiManager.sendRemoteRecord(token, channelId, eventId)
.observeOn(scheduler)
.subscribe(new SuccessCallbackAction<RemoteRecordResponse>(callback),
new ErrorCallbackAction(callback));
}
@Override
public void activateRemoteRecord(String token, String cardNumber, final ServiceCallback<RemoteRecordActivateResponse> callback) {
epgServicesApiManager.activateRemoteRecord(token, cardNumber)
.observeOn(scheduler)
.subscribe(new SuccessCallbackAction<RemoteRecordActivateResponse>(callback),
new ErrorCallbackAction(callback));
}
在本地,我们减少了代码量,并使意图更加清晰。在全局范围内,我们通过添加 4 个新类来增加复杂性。这是否值得取决于您的代码所处的上下文,并且是您的决定。
关于java - 我可以泛化以下代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28590995/
我想概括 ($)喜欢 Control.Category概括(.) ,并且我已经使用本文末尾的代码 (also ideone) 完成了此操作。 在这段代码中,我创建了一个名为 FunctionObjec
我写这个问题是因为我只找到了有关我的场景的部分信息。 在 Azure 中克隆 VM,在我可以创建尽可能多的副本之后,我需要取消分配和泛化。我没有找到的详细信息是: VM 在核心方面概括了我的“成本”?
我写这个问题是因为我只找到了有关我的场景的部分信息。 在 Azure 中克隆 VM,在我可以创建尽可能多的副本之后,我需要取消分配和泛化。我没有找到的详细信息是: VM 在核心方面概括了我的“成本”?
我正在做一个关于使用邻接列表实现图的教程任务,但构造函数出现问题。 在给定的GraphTester.java中我有: //Constructor cannot be applied to given
我有一个疑问。想象一下,我有三个类别:学生、 worker 、学生/ worker 。 正确的是: ProfissonalArea | |
能否对这段代码进行泛化,以便我可以拥有可变数量的类型/参数? (我真的更喜欢将函数保留在结构之外,以保持代码更干净。) unsigned int const maxID = 2 ^ 8; typede
我想寻求您的帮助以解决我正在尝试解决的涉及 XPath 的问题。 我正在尝试概括用户提供的多个 Xpath,以获得最适合所有提供的示例的 XPath。这是我正在构建的网络抓取系统。 例如:如果用户提供
因此,有一种称为“折叠的通用属性”的东西,确切地说如下: g [] = i; g (x:xs) = f x (g xs) g = fold f i 但是,正如您现在可能的那样,有像 dropWhil
所以我有两种方法: private void updateJobType(, Boolean addTarget, JobType target) { if (addTarget == Boolea
是否有用于搜索图中结构的 levenshtein 距离的概括? 最佳答案 这篇论文可能会引起您的兴趣:Structural Similarity in Graphs 然而,我担心计算这样的距离会非常计
这个问题在这里已经有了答案: How to align checkboxes and their labels consistently cross-browsers (40 个答案) 关闭 9
我一直坚信,如果您复制和粘贴代码,那么会有更优雅的解决方案。我目前正在用 C++ 实现一个字符串后缀特里树,并且有两个实际上相同的函数,只是它们的返回语句不同。 第一个函数检查子字符串是否存在,第二个
我在 MVC 模式中的模型设计方面遇到了问题,并且我坚持使用 C# 的静态类型。 我想做的只是制作一组执行所有数据库插入、更新、删除操作的类。该组由从数据库中的每个表映射的类子组和访问表类的表模型类子
我在一个非常静态的环境中编程,希望以尽可能最好的方式概括问题/代码,使其干净并避免任何样板代码。这是我的情况;我正在开发一个位于程序 和扩展 之间的修改系统,其中扩展将转发 API 调用。当我的修改被
我有一个 api,它为我提供了如下方法: 按用户名搜索用户(用户名,限制) getRandomPremiumUsers(限制) getYoungUsers(maxAge, 限制) 我正在实现一个钩子(
除了通常的 ** 之外,大多数 UNIX 正则表达式都有, + , ?*运算符反斜杠运算符,其中 \1,\2,...匹配最后一个括号中的内容,例如 *L=(a*)b\1*匹配(非常规)语言 *a^n
我正在尝试使用复选框概括选择查询,您将看到的变量选择是从前端文件发布的,该文件使用复选框在后端创建数组。然后,该数组用于 select 语句的 SELECT 子句。目前,表头输出正确的 header
我需要构建一个乘积运算符,将两个任意大小的 vector 的乘积作为矩阵返回。 例如产品 u = [u1; u2; u3] 和 v = [v1; v2; v3] 将是u*v' = [u1*v1 u1*
目前,我有一个功能代码可以在我的页面上动态添加和删除表单输入。我有多个表单需要包含在页面上,所以我做了一个事件操作,他们可以按下一个按钮,它会隐藏除相关表单之外的所有表单。这工作正常,但它与我的 jQ
我正在使用 ExoPlayer 2 播放来自网络的音乐。现在我想通过使用漂亮的 SimpleCache 类来缓存下载的音乐。我的问题如下:每次我请求播放歌曲时,服务器都会返回一个不同的 URL(也是针
我是一名优秀的程序员,十分优秀!