【问题标题】:Default implementation for interface ? or leave as null接口的默认实现?或保留为空
【发布时间】:2016-12-15 16:13:24
【问题描述】:

所以这个问题不是很容易理解,但我会尽力而为,假设我有一个界面:

interface OnWindowMoveListener{
    void onWindowMove(MotionEvent motionEvent);
}

现在在我的课上

OnWindowMoveListener onWindowMoveListener;

public void setOnWindowMoveListener(OnWindowMoveListener onWindowMoveListener){
    this.onWindowMoveListener = onWindowMoveListener;
}

稍后在我的代码中,onWindowMoveListener.onWindowMove() 被调用,但我不想检查 onWindowMoveListener 是否已由用户设置,因此不为空,我将如何为此侦听器创建默认实现?我是否必须在我的类的主要方法中手动实现接口,以防用户自己不实现它们,或者有其他方法吗?我一直在检查接口是否在调用之前已经实现,但想知道是否有更简洁的方法来执行此操作。谢谢

【问题讨论】:

  • 简单检查用户设置的监听对象是否为非空是正常的,常见的。
  • 包含的类可以实现你的监听器..public class MyClass implements OnWindowMoveListener..然后分配它this.onWindowMoveListener = this。现在该值不会以null 开头,但这并不意味着用户不会尝试设置null 侦听器 - 您仍然需要检查null
  • @VGR 如果我必须在调用它之前检查每个侦听器以查看其是否为非空,那么代码不会开始看起来整洁,这就是我正在寻找替代解决方案的原因:/
  • @trooper 用户设置一个空监听器不会是一个大问题,但是当我在这种情况下调用onWindowMoveListener 会发生什么?
  • @Amroelaswar 作为在您的包含类上实现OnMoveWindowListener 的一部分,它现在拥有自己的onWindowMove 方法。 - 它将被执行 - 将其留空,不执行任何操作。

标签: java interface implementation


【解决方案1】:

进行 nullcheck 不是成本操作,但如果您确实需要避免它,您最好的选择是使用 Null 对象设计模式。

创建一个什么都不做的接口实现,然后将其用作 onWindownMoveListener 的默认值。

有关此设计模式的更多信息,请咨询:https://sourcemaking.com/design_patterns/null_object/java-0

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2015-07-31
    • 2014-12-06
    • 2014-12-03
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2016-06-16
    • 2019-03-19
    相关资源
    最近更新 更多