【问题标题】:Need to know which method of variable handling would be more efficient in this case需要知道在这种情况下哪种变量处理方法更有效
【发布时间】:2011-06-03 19:34:17
【问题描述】:

现在我有一个配置阅读器类,它通过一个文本配置文件并将它找到的值添加到我之前声明的变量中。然后将所有这些变量传递给构造函数。不用说,它很乱,看起来像这样:

String buttonText = "";
String buttonPassword = ""; 
String buttonAction = ""; 
String buttonFont = "";
int buttonPosX = 0;
int buttonPosY = 0;
int buttonWidth = 0;
int buttonHeight = 0;
int buttonFontSize = 0;
int buttonFontColor = 0;
int buttonBgColor = 0;
int buttonLayoutPosition = 0;

// Gathering information here ...

parent.addButton(buttonText, buttonPassword, buttonPosX, buttonPosY, buttonLayoutPosition, buttonWidth, buttonHeight, buttonAction, buttonFont, buttonFontSize, buttonFontColor, buttonBgColor);

有没有更好的方法来做到这一点?我听说过地图,这是一个使用地图的好地方吗?我要牢记效率,还要考虑代码的可读性和维护性。

【问题讨论】:

    标签: java variables performance maintenance readability


    【解决方案1】:

    您可以创建一个ButtonConfig 类,将所有这些值作为字段。然后,您只需将单个对象传递给 c'tor。根据整个程序的组织,将初始化所有配置参数的代码移动到配置类本身可能是有意义的。

    【讨论】:

      【解决方案2】:

      如果你使用 Eclipse,你可以在上下文菜单中选择

      ->重构->提取类

      创建一个数据对象。 该数据对象只需写入一次,并将作为整个对象传递给构造函数。

      这是一种有价值的地图替代方案,因为您不会丢失类型验证和 javadocs 等。

      您的代码将如下所示:

      public static class Data
      {
        String buttonText = "";
        String buttonPassword = ""; 
        String buttonAction = ""; 
        String buttonFont = "";
        int buttonPosX = 0;
        ...
      }
      
      ...
      private Data data = new Data();
      ...
      parent.addButton(data);
      ...
      

      Eclipse 为您执行此操作的对话框如下所示:

      【讨论】:

      • 哇,我不知道你能做到这一点。有这个标准吗?如果我使用这种方法,其他人会不会拉“他在做什么?”查看我的代码时?
      • 一直在用,和我的回答基本一样。这不会阻止某人想知道“他在做什么?”;你只需要忍受这种风险。 :)
      • 这是一种相当标准的方法,一点也不壮观。您可以将其用于某些...
      【解决方案3】:

      这是一个旧线程的链接,但它准确地解释了我会做什么,我会使用构建器模式: Managing constructors with many parameters in Java

      【讨论】:

        【解决方案4】:

        (顺便说一下,这里将String 初始化为“”是没有意义的。)

        您可能希望使用HashMap 构造String 到Object 的Map,然后将其传入。这是传递任意键值集的简单方法。 Properties 对象也可能是合适的,因为该类可以从文件中读取键值对,尽管所有对象都被视为文本。

        效率高吗?那里真的没有太多开销,不。我不认为这是一个紧密的循环,所以在你证明它太慢之前,不要担心。

        【讨论】:

        • 谢谢@Sean Owen,我会研究一下HashMaps,看看它在可读性方面是否更漂亮。我的意思是,发生的事情很简单,但我不喜欢在编程中排长队,所以理想情况下我想传递某种 Map。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多