【问题标题】:Java - Concatenate String with method nameJava - 用方法名连接字符串
【发布时间】:2020-02-24 12:20:04
【问题描述】:

正如您在这篇文章标题中看到的那样,我有一个愚蠢的问题......但是我想知道是否有更有效的方法来处理我面临的这种编程场景。我正在使用 Java 进行编程,并创建了以下类:

public class Route {
    private String objective_1;
    private String objective_2;
    ...

    // CONSTRUCTOR__________________________________________________________________________________

    public Route() {
    }

    public Route(String objective_1, String objective_2, ...) {;
        this.objective_1 = objective_1;
        this.objective_2 = objective_2;
        ...
    }

    // GET AND SET__________________________________________________________________________________

    public String getObjective_1() {...}

    public void setObjective_1(String objective_1) {...}

    public String getObjective_2() {...}

    public void setObjective_2(String objective_2) {...}

    ...
}

接下来(在主类中)我从 Route 类 创建对象并将它们保存在 Arraylist (array_routes) 中。后来我尝试从 Arraylist 的 0 索引上的对象获取并打印所有目标。我正在使用此代码:

System.out.println(array_routes.get(0).getObjective_1);
System.out.println(array_routes.get(0).getObjective_2);
...

现在来一个愚蠢的问题...我在路线类中有 28 个目标。我打算做的是有一种更有效的方法来打印所有对象目标。 而不是编写 28 个 get Objective 方法(就像在前面的代码中一样)我想知道我是否可以这样做:

for (int j = 1; j < 29 ; j++) {
    String jj = String.valueOf(j);
    System.out.println(array_routes.get(0).getObjective_+"jj");
}

我知道前面的代码不起作用...但是有没有人知道不编写 28 get Objective 方法的有效方法?这甚至可能吗?

提前感谢您的宝贵时间,也希望您能提供帮助!

【问题讨论】:

  • 使用像Map这样的数据结构来实现你的逻辑。
  • 你找错树了。最好将所有目标放在一个集合中,如果按数字索引则为 ArrayList,如果按 String 或其他类型索引则为 Map,然后在需要时简单地循环。
  • 我不喜欢建议,但您正在寻找的解决方案可以通过反射来实现 - 但实际上将您的路线视为愚蠢的数据容器并不是一个好的编码实践,但您应该设计路线作为有意义的对象,例如本身可以有一个打印方法。
  • 我会研究你的建议!非常感谢您的宝贵时间和帮助!
  • @Smutje 那你为什么推荐它?使用反射来实现 Java 的动态编程功能只会导致问题。特别是对于可能将其理解为 Java 工具集的“正常”部分的初学者。

标签: java object arraylist concatenation


【解决方案1】:
IntStream.range(1, 29).forEach(i->{
            Method method = output.getClass().getMethod("getFillerLibre"+ String.valueOf(i));
            method.invoke(output);
        });

【讨论】:

    【解决方案2】:

    我认为这是高级枚举使用的一个案例。然后,您就有了目标的名称,并且可以处理地图、集合和子集。

    enum Objective { OBJIVE1, OBJECTIVE2, ... }
    
    EnumMap<Objective, String> objectives = new EnumMap<>(Objective.class);
    

    反射是一个拐杖而且很慢,所以给 API 重新设计一个机会。

    【讨论】:

      猜你喜欢
      • 2013-02-23
      • 2011-01-28
      • 1970-01-01
      • 2011-04-02
      • 2013-05-22
      • 1970-01-01
      • 2012-03-01
      • 2016-12-11
      相关资源
      最近更新 更多