在 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);
}
}
我正在从事的项目要求我拥有三种具有特定属性的特定票证类型。
其中一些属性是最终的和静态的,因为它们不应更改,但可能需要更多类型。这将意味着对抽象 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);
}
}