我一直在努力解决以下问题。
有两个类-客户类和购物车,与聚合(?)相关,即客户类内部具有购物车的私有字段,因此可以将购物车分配给当前客户(用户/所有者)。我想实现另一个类-CheckOutMachine,其主要任务是客户结算,然后打印帐单。
问题是我想以两种不同的方式实现这一点
public class Main() {
public static void main(String[] args) {
// creating necessary objects
Customer customer = new Customer("James");
Cart cart = new Cart();
customer.setCart(cart);
CheckOut checkOut = new CheckOut();
// creating products, adding to the Cart
// ...
// customer settlement
checkOut.checksOut(customer)
checkOut.checksOut(cart)
}
}
所以用一个方法将两个完全不同的对象作为参数。
我正在寻找在这种情况下最合适的机械师。
起初我想到的是泛型类型,但无法想象它的实现,阅读您的建议真是太棒了。
最佳答案
如果Customer
和Cart
具有有用的(*)通用超类,则只需要一个采用该类实例的方法。
class CheckOut {
void checksOut(TheCommonSuperClass param) { ... }
}
如果它们没有有用的公共超类,则有两个重载,每个重载一个。
class CheckOut {
void checksOut(Customer customer) { ... }
void checksOut(Cart cart) { ... }
}
(*)“有用”是指超类提供了一些方法来访问
checksOut
方法中需要的内容。显然,它们将始终具有公共的超类(java.lang.Object
),但这对于执行特定于您的应用程序的操作并没有真正的用处。