这个Java类声明正确吗?

这个Java类声明正确吗?,java,inner-classes,Java,Inner Classes,我想用子类DataClass1(使用自己的子类Item)和DataClass2(使用自己的子类Item1)构建Data主类 dataClass2List也是如此 所有子类都必须是公共的 有没有更好的方法来声明和填写我的类数据 谢谢 p、 数据类及其子类只包含变量而不包含方法 一些建议: 您应该使用getter和setter来访问不同的字段。 由于数据类是公共的,它们是否需要是内部类? 要解决这个问题,您需要将不同的公共类移动到不同的文件中 所有内部清单都可以做成“最终清单”。 一些建

我想用子类
DataClass1
(使用自己的子类
Item
)和
DataClass2
(使用自己的子类
Item1
)构建
Data
主类

dataClass2List也是如此

所有子类都必须是公共的

有没有更好的方法来声明和填写我的类
数据

谢谢


p、 数据类及其子类只包含变量而不包含方法

一些建议:

  • 您应该使用getter和setter来访问不同的字段。
  • 由于数据类是公共的,它们是否需要是内部类?
要解决这个问题,您需要将不同的公共类移动到不同的文件中

  • 所有内部清单都可以做成“最终清单”。

一些建议:

  • 您应该使用getter和setter来访问不同的字段。
  • 由于数据类是公共的,它们是否需要是内部类?
要解决这个问题,您需要将不同的公共类移动到不同的文件中

  • 所有内部清单都可以做成“最终清单”。

你似乎混淆了一些概念

代码中没有子类
DataClass1
DataClass2
属于
Data
Item
DataClass1
的内部类,
Item1
DataClass2
的内部类

它们没有明显的内部类的必要性,在确定需要内部类之前,最好避免使用内部类,很可能直到您对Java有了更好的了解

如果将这些类作为内部类,您建议使用它们将不起作用,因为它们是非静态的内部类,只能在外部类的实例的上下文中创建

按照类定义的原样,您发布的用法的翻译大约是

Data data = new Data();
DataClass1 dc1 = data.new DataClass1();
Item itm = dc1.new Item();
itm.n1="1";
itm.n2="2";
itm.n3="3";
dc1.itemList.add(itm);
data.dataClass1List.add(dc1);
但这真的很糟糕(它可能包含错误——我已经费心去编译了)。让类只包含字段而不包含方法,并以这种方式添加数据根本不是一种非常面向对象的方法


正如WirthLuce在一篇评论中指出的那样,您应该更改名称以表示域中的某些内容,并创建方法使其执行适当的操作,而不仅仅是保存从外部操纵的数据。

您似乎混淆了一些概念

代码中没有子类
DataClass1
DataClass2
属于
Data
Item
DataClass1
的内部类,
Item1
DataClass2
的内部类

它们没有明显的内部类的必要性,在确定需要内部类之前,最好避免使用内部类,很可能直到您对Java有了更好的了解

如果将这些类作为内部类,您建议使用它们将不起作用,因为它们是非静态的内部类,只能在外部类的实例的上下文中创建

按照类定义的原样,您发布的用法的翻译大约是

Data data = new Data();
DataClass1 dc1 = data.new DataClass1();
Item itm = dc1.new Item();
itm.n1="1";
itm.n2="2";
itm.n3="3";
dc1.itemList.add(itm);
data.dataClass1List.add(dc1);
但这真的很糟糕(它可能包含错误——我已经费心去编译了)。让类只包含字段而不包含方法,并以这种方式添加数据根本不是一种非常面向对象的方法


正如WirthLuce在一篇评论中指出的那样,您应该更改名称以表示域中的某些内容,并创建方法使其能够执行适当的操作,而不仅仅是保存从外部操纵的数据。

这确实不是一种非常面向对象的方法。正确方向的(第一步)是更改类的名称以反映类所代表的内容(与泛型单词“data”相反),然后在此基础上实现方法。@WirthLuce I仅更改此问题的名称这确实不是一种非常面向对象的方法。正确方向的(第一步)是更改类的名称以反映类所代表的内容(与泛型单词“data”相反),然后在此基础上实现方法。@WirthLuce我只为这个问题更改名称
public class SomeClass {

    private String name;
    [...]

    public void setName(String name) {this.name = name;}
    public String getName() {return name;}
    [...]
}
public final List<Item> itemList = new ArrayList<Item>();
public class Item {
    public Item(String n1,String n2,String n3)  {
        this.n1 = n1;
        this.n2 = n2;
        this.n3 = n3;
    }
    [...]
}
Data data = new Data();
DataClass1 dc1 = data.new DataClass1();
Item itm = dc1.new Item();
itm.n1="1";
itm.n2="2";
itm.n3="3";
dc1.itemList.add(itm);
data.dataClass1List.add(dc1);