基本上,我有一个类,我有我的数组,就像这样
public final class DepotDatabase {
private Driver[] arrayDrivers;
public DepotDatabase() {
arrayDrivers = new Driver[4];
arrayDrivers[0] = new Driver(1234, 1234, 0); // sample driver
arrayDrivers[1] = new Driver(4444, 4444, 0); // sample driver
arrayDrivers[2] = new Driver(1337, 1337, 1); // sample manager
arrayDrivers[3] = new Driver(1234, 1234, 0); // sample driver
}
我想在另一个类中打印这个数组,我确实在另一个类中设置了数组
public Driver(int username, int password, int managerCheck) {
this.username = username;
this.password = password;
this.managerCheck = managerCheck;
}
但现在我希望能够打印出所有的驱动程序,但是在另一个名为ViewDrivers或类似的类中
答案 0 :(得分:1)
这就是为什么你需要 getters 和 setters 。你应该:
public Driver[] getDrivers() {
return arrayDrivers;
}
在另一个类中,你只需调用它(并打印它或其他类)。
答案 1 :(得分:1)
您可以在DepotDatabase
内创建一个方法来打印数组,然后从中创建一个对象并调用print方法。
public final class DepotDatabase {
private Driver[] arrayDrivers;
public void printArray() {
for (int i = 0; i < arrayDrivers.length; i++) {
Driver d = arrayDrivers[i];
System.out.println("Username : " + d.getUsername());
System.out.println("Password : " + d.getPassword());
System.out.println(" Manager Check: " + d.getManagerCheck());
}
}
你可以从测试课中做到:
public void execute() {
DepotDatabase ddb = new DepotDatabase();
ddb.printArray();
}
答案 2 :(得分:0)
如果您计划在另一个类中打印您的数组,则会显示该数组的访问者。
Java的常见模式是使用“get
加名称关闭属性”,getDrivers()
您还应该避免类名中的类名,因为它可能因应用程序生命周期而发生变化。
public final class DepotDatabase {
//your code
public Driver[] getDrivers() {
return this.arrayDrivers;
}
}
接下来要回答的问题是返回整个数组是个好主意。如上所述返回时,您可以放松对它的控制。每个调用该方法的人都能够改变它的内容。
为了防止这种情况,您应该使用所谓的Defensive copying
public Driver[] getDrivers() {
return Arrays.copyOf(arrayDrivers, arrayDrivers.length);
}
然后,人们会得到一份副本,不会伤害你的课程。
这个问题是你的班级的消费者每次都必须调用这个方法来获得新的汽车列表。
要解决此问题,您可能希望使用[collection framework]而不是冷定义的数组:
List<Driver> drivers new ArrayList<>();
并将驱动程序提供为[immutable] list
public Iterable<Driver> getDrivers() {
return java.util.Collections.unmodifiableList(drivers);
}
Iterable
是一个接口,允许您获取类wold的列表使用者可以遍历它的交互器。如果您想让他检查该列表是否包含某个驱动程序,您可以将返回类型设置为Collection
class Storage {
private String items[] = new String[10];
public String[] getItems() {
return Arrays.copyOf(items, items.length);
}
}
class Store {
Storage storage = new Storage();
private void printStorage() {
String[] items = storage.getItems();
for (String item : items) {
}
}
}