这个Java类声明是否正确?

时间:2011-05-15 17:00:18

标签: java inner-classes

我想构建Data主类,其子类为DataClass1(带有自己的子类Item)和DataClass2(带有自己的子类Item1)。

public class Data{

        public  List<DataClass1> dataClass1List = new ArrayList<DataClass1>();
        public  List<DataClass2> dataClass2List = new ArrayList<DataClass2>();


        public class DataClass1{

            public String name;   
            public  List<Item> itemList = new ArrayList<Item>();

            public class Item{
                public String n1;          
                public String n2;               
                public String n3;              
            }

        }


        public class DataClass2{

            public String name; 
            public  List<Item1> item1List = new ArrayList<Item1>();

            public class Item1{
                public String n5;
                public String n6;   
            }

        }

    }

当我想填写主要课程Data时,我使用此代码:

Data data = new Data();
Item itm = new Item;
itm.n1="1";
itm.n2="2";
itm.n3="3";
data.dataClass1List.itemList.add(itm);

和dataClass2List相同

所有子类必须是公开的

是否有更好的方式来声明和填写我的课程Data

感谢!!!

P.S。数据类及其子类只包含变量而不包含方法!

2 个答案:

答案 0 :(得分:2)

你似乎在这里混淆了一些概念。

您的代码中没有子类。 DataClass1DataClass2Data的{​​{3}},ItemDataClass1的内部类,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在评论中指出的那样,您应该更改名称以表示域中的某些内容,并创建方法以使其执行适当的操作,而不是仅仅保存从外部操作的数据。

答案 1 :(得分:1)

一些建议:

     
  • 您应该使用getter和setter来访问不同的字段。
public class SomeClass {

    private String name;
    [...]

    public void setName(String name) {this.name = name;}
    public String getName() {return name;}
    [...]
}
     
  • 由于Data类是公共的,它们是否需要是内部类?

要解决此问题,您需要将不同的公共类移动到不同的文件。

     
  • 所有内部列表都可以成为“最终”。
public final List<Item> itemList = new ArrayList<Item>();
     
  • 您可以为类Item创建一个构造函数。
public class Item {
    public Item(String n1,String n2,String n3)  {
        this.n1 = n1;
        this.n2 = n2;
        this.n3 = n3;
    }
    [...]
}