在 Java 中,您能否以参数化方式使用 getter 和设置器,即传入代码来决定将哪个 class 变量传递给 return

In Java can you use getter and setters in a parameterized manner i.e pass in a code to decide which class variable to return

我正在从事的项目要求我拥有三种具有特定属性的特定票证类型。

其中一些属性是最终的和静态的,因为它们不应更改,但可能需要更多类型。这将意味着对抽象 class 的更改,而不是对实现它的 class 的更改。我创建了一个包含这些 class 变量的抽象 class,以限制我需要在 class 实现值中编写的逻辑。我编写了 getter 接收参数(票证类型代码)的方法,然后该方法切换代码和 returns 适当的值。在 setter 方法中,我收到一个代码参数,然后根据收到的代码更新 class 变量。

我的问题是:

1.Is 这种不好的做法如果是这样我应该修改我的 class 的设计吗? 2. 如果是这样,我应该如何以一种可以使代码可重用和参数驱动的方式解决问题?

以前我会创建一个 xml 或参数文件,这样我就可以更改参数文件而不是更改代码,但我已经有几年没有在 Java 中编码了,我仍然学习最佳实践。

这是一个代码片段:

private static final int iPickThreeLimit = 50;
private static final int iPickFourLimit = 40;
private static final int iPickFiveLimit = 60;

private static int iPickThreeCount = 50;
private static int iPickFourCount = 40;
private static int iPickFiveCount = 60;

protected static void setTicketCount(String sTicketType) {

    switch (sTicketType) {
    case "PickThree":
        AbstractLotteryMachine.iPickThreeCount = iPickThreeCount--;
        break;
    case "PickFour":
        AbstractLotteryMachine.iPickFourCount = iPickFourCount--;
        break;
    case "PickFive":
        AbstractLotteryMachine.iPickFiveCount = iPickFiveCount--;
        break;
    } //end switch
} // end setTicketCount

protected static int getPickLimit(String sTicketType) {
    int iTicketLimit = 0;

    switch (sTicketType) {
    case "PickThree":
        iTicketLimit = iPickThreeLimit;
        break;
    case "PickFour":
        iTicketLimit = iPickFourLimit;
        break;
    case "PickFive":
        iTicketLimit = iPickFiveLimit;
        break;
    } //end switch
    return iTicketLimit;

  } //end getPickLimit

如果我必须为每种票证类型编写单独的 getter 和 setter 方法,这会增加 class 中所需的逻辑,我正在实现这个抽象 class英寸

我建议研究枚举变量;它们以静态方式运行并且可以包含值。

public enum Pick
{
  PickThree(30),
  PickFour(40),
  PickFive(50);

  private int limit;

  private Pick(int i) { limit = i; }

  public int getLimit() { return limit; }
}

现在你的另一个 class(es) 可以有一个 Pick 类型的变量,可以保存其中任何一个,并使用 variable/class' getLimit() 方法来得到号码。枚举类型也可以有其他逻辑,这只是涵盖了你的问题。

我认为不可变方法更简洁。

public final class Ticket {

   private final int pickCount;
   private int pickThreeLimit=50;

   private Ticket(int count, int limit){
      this.count = count;
      this.limit = limit
   }

   pubic int getTicketLimit(){
      return this.pickThreeLimit;
   }

   public in getTicketCount(){
      return this.count;
   }

   //add more static methods for each ticket type
   public static Ticket createPickThree(){
     this.pickThreeLimit--;
     return new Ticket(50,pickThreeLimit);
   }
}