所以,因为我正在推动我有限的Java知识的发展。我想在一个类中有一个对象数组。我认为这是子类,但这不是我想要的。我不知道我想要什么。这是java docs示例。
public class Bicycle {
// the Bicycle class has three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has one constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has four methods (getters/setters removed)
// here is my new thought - not sure if its right
public class DriveChain {
public int big-chainring
public int little-chainring
public int chain
// and getters and setters
}
// here i want to create an array of this.
ArrayList<DriveChain> dcArray ;
// here i can add to the array
public void addDriveChain(drivechain dc) {
this.dcArray.add(dc);
}
}
我想在此类中添加带getter和setter的字段,并将其视为数组列表。例如如上所述。希望我有意义。
答案 0 :(得分:2)
我不明白为什么你不会将DriveChain
放在自己的档案中。如果将其保留为Bicycle
中的嵌套类,请确保它是static
类,以避免捕获封闭的实例。
除此之外,你的方法是有道理的,只需使用这个小小的改变:
private final List<DriveChain> driveChains = new ArrayList<>();
集合应该主要是final
并初始化为空集合,因为它们无论如何都是可变的,但这消除了NullPointerException
;
使用List
作为变量类型,而不是ArrayList
(对接口进行编程而不是实现);
不要使用&#34; array&#34;作为变量名称的一部分,因为它不是数组。使用dcList
或,像我一样driveChains
。
答案 1 :(得分:1)
Java不允许在一个.java文件中包含多个公共类。
因此,您可以根据需要通过声明DriveChain
和其他Bicycle部件的私有内部类来执行您想要的操作,如果Bicycle
是唯一将使用这些组件的类,则这是有意义的。深思熟虑的是你明天会设计一个Motorbike
课程,可能会使用DriveChain
的增强版。
如果这是真的,那么最好为每个组件制作公共类。
如果不是,我会遵循以下模式:
public class Bicycle {
//declare all component classes first
private class DriveChain {
//impl
}
private class Handlebars {
//impl
}
.....
//Form private/public members from the already declared components
private int cadence;
private int gear;
private int speed;
private ArrayList<DriveChain> dcArray ;
private Handlebars handlebars ;
//Init each in constructor
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
//including the non parametrized ones
dcArray = new ArrayList<DriveChain>();
handlebars = new Handlebars();
}
//member functions that can now access any of the member fields and their internal functions as well.
}