【发布时间】:2020-09-21 18:01:37
【问题描述】:
如何创建一个方法来根据某些条件返回不同的不可变类对象?
如果不可能,是否有替代方法来解决这个问题?
public class ArriveEvent {
private final List<Server> list;
private final Customer cust;
ArriveEvent(Customer ppl, List<Server> listing){
this.list = listing;
this.cust = ppl;
}
PutSomethingHere? execute(){
}
public String toString() {
return String.format("%.3f %d arrives", cust.giveArrival(), cust.giveID());
}
}
主要问题是execute() 根据列表中不可变class Server 的条件返回不同的语句,这些语句具有不同的属性,例如可用性或是否有其他客户在线。
private final boolean avail;
private final boolean anyoneWaitingInLine;
这是要求:
jshell> new ArriveEvent(new Customer(1, 0.5), Arrays.asList(new Server(1, false, false, 0), new Server(2, true, false, 0))).execute() // Two servers: (1) busy; (2) free
$.. ==> 0.500 1 served by 2
jshell> new ArriveEvent(new Customer(1, 0.5), Arrays.asList(new Server(1, false, false, 0), new Server(2, true, false, 0))).execute().execute()
$.. ==> 1.500 1 done serving by 2
jshell> new ArriveEvent(new Customer(1, 0.5), Arrays.asList(new Server(1, false, true, 5.0), new Server(2, false, false, 10.0))).execute() // Both servers busy, (1) has waiting customers
$.. ==> 0.500 1 waits to be served by 2
jshell> new ArriveEvent(new Customer(1, 0.5), Arrays.asList(new Server(1, false, true, 5.0), new Server(2, false, false, 10.0))).execute().execute()
$.. ==> 10.000 1 served by 2
jshell> new ArriveEvent(new Customer(1, 0.5), Arrays.asList(new Server(1, false, true, 5.0), new Server(2, false, false, 10.0))).execute().execute().execute()
$.. ==> 11.000 1 done serving by 2
jshell> new ArriveEvent(new Customer(1, 0.5), Arrays.asList(new Server(1, false, true, 5.0), new Server(2, false, true, 10.0))).execute() // Both busy with waiting customer
$.. ==> 0.500 1 leaves
我最初的想法是创建多个类servedby、wait、doneserving、leaveextendsArrivalEvent class,因为我需要不同的toStrings(),具体取决于服务器的情况和客户,然后当我运行 execute() 时,它将根据服务器和客户的情况返回扩展 ArrivalEvent 类的不同类,并有另一个覆盖 execute() 的类返回其中的一个类。
【问题讨论】:
-
是否有可能有一个方法可以根据条件在 java 中返回不同的类对象? - 是的,只有那些不同的类将扩展一些公共基类/类型。
-
是的,我最初的计划是创建扩展 ArrivalEvent 类的“servedby”、“wait”、“doneserving”、“leave”,执行将根据服务器的条件返回这些子类之一在列表中,我该怎么做?
-
查看答案。
-
您能否将该信息移至您的问题(没有“编辑:”、“更新”等 - 问题应该显示为今天写的)? Stack Overflow is not a forum。你可以edit your question。