我一直在努力解决以下问题。
有两个类-客户类和购物车,与聚合(?)相关,即客户类内部具有购物车的私有字段,因此可以将购物车分配给当前客户(用户/所有者)。我想实现另一个类-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)
 }
}


所以用一个方法将两个完全不同的对象作为参数。
我正在寻找在这种情况下最合适的机械师。
起初我想到的是泛型类型,但无法想象它的实现,阅读您的建议真是太棒了。

最佳答案

如果CustomerCart具有有用的(*)通用超类,则只需要一个采用该类实例的方法。

class CheckOut {
  void checksOut(TheCommonSuperClass param) { ... }
}


如果它们没有有用的公共超类,则有两个重载,每个重载一个。

class CheckOut {
  void checksOut(Customer customer) { ... }
  void checksOut(Cart cart) { ... }
}




(*)“有用”是指超类提供了一些方法来访问checksOut方法中需要的内容。显然,它们将始终具有公共的超类(java.lang.Object),但这对于执行特定于您的应用程序的操作并没有真正的用处。

10-06 12:55