【问题标题】:Performance: Inner Interface vs separate Interface class性能:内部接口与单独的接口类
【发布时间】:2018-07-22 18:06:18
【问题描述】:

在我的 android 项目中,我在 4 个不同的 Activities 中使用了 4 个 Recyclerviews,我需要 3 个方法 onClickonButtonClickonDeleteClick。有些方法使用了有些方法没有。首先,我在每个我需要的Activity 中创建了一个内部interface,并为它们提供了适当的方法。但是因为它们在重复,所以我创建了一个单独的 interface 类,其中包含所有 3 种方法,然后在我的 4 Activities 中引用它。我覆盖了我需要的方法和我不需要的方法,我只是留下了空的身体。最好/首选的方式是什么?

1.

public class A {
                private OnItemClickListener mListener;

                public interface OnItemClickListener {
                    void onDeleteClick(int position);
                }

                ...
                @Override
            public void onDeleteClick(int position) {
                errase(position);
            }
}

2.

public interface OnItemClickListener {
        void onItemClick (int position);
        void onDeleteClick (int position);
        void onButtonClick (int position);
    }

public class A {
     private OnItemClickListener mListener;

     ...
     @Override
            public void onItemClick(int position) {
                 //empty because I dont need it here
            }

            @Override
            public void onButtonClick(int position) {
                 //empty because I dont need it here
            }

            @Override
            public void onDeleteClick(int position) {
                errase(position);
            }
}

【问题讨论】:

  • 创建一个接口并给所有的东西一个default 空体......然后你只需要覆盖应该做任何事情的方法。这与性能无关,只是开发人员的效率。
  • 嵌套接口是静态的。没有“内部界面”之类的东西。

标签: java methods interface


【解决方案1】:

您可以创建一个适配器类并为接口中声明的所有方法提供空实现,这将减少重复的代码行,然后扩展它。 (虽然不确定这是否是 Java 8 或更高版本的最佳方式) 在你的代码中有点像

interface OnItemClickListener {
    void onItemClick(int position);
    void onDeleteClick(int position);
    void onButtonClick(int position);
}

abstract class Adapter implements OnItemClickListener {
    public void onItemClick(int position) {};
    public void onDeleteClick(int position) {};
    public void onButtonClick(int position) {};

}

public class A extends Adapter
{
    @Override
    public void onDeleteClick(int position) {
        errase(position);
    }
}

【讨论】:

    【解决方案2】:

    在我看来,没有“最佳/首选”方式:

    1. 由于嵌套接口隐式不是内部的(它们是隐式静态的),因此没有对封闭类实例的隐藏引用。因此,普通接口和嵌套接口之间的性能差异应该

    2. Java 风格指南不会/不会推荐一种形式优于另一种形式作为通用声明。

    3. 我没有听说有人试图对此进行科学的可用性研究。

    4. 我没有听说有人试图科学地衡量开发人员对此的看法。

    5. 这给我们留下了“随机 StackOverflow 贡献者的意见”,我不相信这些意见可以指导我。 (每个人阅读代码时的心理过程都不一样……)

    底线:什么都没有。


    在给定实际上下文的情况下,由您决定认为哪个更具可读性/可维护性。但是:

    • 我建议您在选择时保持一致。

    • 如果您的 API 可能被其他人使用/维护,最好与他们讨论。与同事达成共识将是一件好事,甚至是“同意不同意”然后继续前进。

    但不要纠结于此,因为这绝对是一个问题。

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 2018-05-08
      • 1970-01-01
      • 2023-03-27
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多