gpt4 book ai didi

java - 静态嵌套 Cass 在外部类中保存多个列表

转载 作者:行者123 更新时间:2023-11-30 07:05:05 24 4
gpt4 key购买 nike

我正在尝试执行类似于以下伪代码的操作。这是否违反使用嵌套类的任何规则或最佳实践?

public class Foo{
private list1, list2;

Bar bar = new Bar(list1, list2);
// use bar.listA, bar.listB, bar.listC,
//bar.listD, bar.listE

private static class Bar{
private list1, list2;
private listA, listB, listC, listD, listE;

private Bar(list1, list2) {
this.list1 = list1;
this.list2 = list2;
//logic to split list1 and list2 into 5 lists: listA, listB, listC, listD, listE.
//initialize the 5 lists
}
}
}

出于 Oracle or the reasons mentioned by Oracle: 提到的原因,我使用嵌套类

  • 这是一种对仅在一个中使用的类进行逻辑分组的方法地点
  • 它增加了封装性
  • 它可以带来更多的可读性和可维护的代码
  • 及原因 mentioned here

我将嵌套类设为静态,因为我不需要直接访问外部类成员。

编辑:为了更具体,我想到了一些问题:我应该使用 ENUM 而不是嵌套类吗?我应该对嵌套类中的 5 个列表使用 getter/setter 吗?嵌套类的构造函数是否是放置拆分逻辑的正确位置?在外部类中直接引用嵌套类的私有(private)成员可以吗?等等

最佳答案

list1 and list2 contain 'event's. And based on the 'type' of events, I split them up into 5 lists

嗯,作为一般经验法则,您不应该使用构造函数,因为它们有副作用。

因此,我可能会选择 groupEvents Foo内的功能。如果分组逻辑相当复杂,那么您可能会得到 EventGrouper返回 GroupedEvents 的无状态服务实例或类似 Map<EventType, List<Event>> .

例如

public class Foo {
private GroupedEvents groupedEvents;

public Foo(List<Event> list1, List<Event> list2) {
this.groupedEvents = groupEvents(list1, list2);
}

private GroupedEvents groupEvents(List<Event> list1, List<Event> list2) {
Map<EventType, List<Event>> eventsByType = //perform grouping
return new GroupedEvents(eventsByType);
}
}

如果逻辑足够复杂,您可以移动 groupEvents函数到无状态EventGrouper嵌套或非嵌套的类。设计的重要方面是 EventGrouper不应在其构造函数内执行分组。

现在我听到你说,不是 Foo现在在它的构造函数中进行分组吗?我们不是把问题推到了更高的层次吗?好吧,虽然分组确实发生在 Foo 期间。的 build ,Foo的客户对象没有实例化 Foo实例仅用于它的分组副作用(希望它没有)。分组只是成为 Foo 的一部分的实现细节。的初始化过程,客户端甚至可能不知道发生了这样的分组。

关于java - 静态嵌套 Cass 在外部类中保存多个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40274465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com