Java从属性类检索数据

Java从属性类检索数据,java,Java,我不熟悉java中的对象和类。我想知道如何从属性对象获取数据。我有四节课 public class Personnel { private ArrayList<Employee> employees = new ArrayList<Employee>(); public void addEmployee(Employee employee){ employees.add(employee); } public ArrayList<Empl

我不熟悉java中的对象和类。我想知道如何从属性对象获取数据。我有四节课

public class Personnel {
  private ArrayList<Employee> employees = new ArrayList<Employee>();

  public void addEmployee(Employee employee){
    employees.add(employee);
  }

  public ArrayList<Employee> getEmployees() {
    return this.employees;
  }

}

public class Employee{
  /**DATAFIELDS*/
  private String name;
  Address address;
  PayInfo pay;

  //Constructor
  //methods
  .....
}

public class PayInfo {
  /**DATAFIELDS*/
  private double salary;
  private boolean isFullTime;

  //Constructors
  //Methods
  ....
}

public class Address {
  /**DATAFIELDS*/
  private String streetAddress;
  private String city;
  private String state;
  private String zipCode;

  //Constructors
  //Methods
  .....
}
我想通过人事对象检索所有信息,比如,
System.out.println(personnelEmployee.getEmployees(……)

或者,
System.out.println(personnelEmployee.getAddress.streetName..等)诸如此类。我知道这听起来可能很愚蠢,但有没有这样的方法???

不确定你在问什么。你可以从人事部的ArrayList中的Employee对象访问信息,假设你在Employee中有适当的getter和setter返回其PayInfo和地址。

你可以将
PayInfo
地址
进入
详细信息
类。每个
员工
可以由一个
详细信息
对象组成。然后,您可以从
人员
类访问
详细信息
对象:

class Personnel {
    private Map<String, Employee> employees = new HashMap<>();

    public void addEmployee(Employee employee) {
        employees.put(employee.getName(), employee);
    }

    public Details getEmployeeDetails(String name) {
        return employees.get(name).getDetails();
    }
}

class Employee {
    private String name; //could be stored in Details
    private Details details;

    public Employee(String name, Details details) {
        this.details = details;
    }

    public Details getDetails() {
        return details;
    }

    public String getName() {
        return name;
    }
}

class Details {
    private PayInfo payInfo;
    private Address address;

    public Details(PayInfo payInfo, Address address) {
        this.payInfo = payInfo;
        this.address = address;
    }

    public PayInfo getPayInfo() {
        return payInfo;
    }

    public Address getAddress() {
        return address;
    }
}

此设计严重违反了,因此如果您正在寻找一个不违反它的设计,我将非常乐意在一个更强大的设计中进行编辑。

请对java初学者教程进行一些研究,您会理解的。如果您能给我看一个不违反任何法律的设计,我将非常高兴。非常感谢您的帮助g me.@Tom我意识到纠正违规需要重新思考整个设计。您的代码需要模型视图设计(MVC或MVVM),我觉得这超出了这个问题的范围。模型视图设计将允许您将程序(模型)与向用户显示数据所需的行为(由视图处理)分离。请随意发布一个后续问题,我会在那里回答,但这又一次超出了您当前的工作范围,如果没有适当的知识,可能会使您的开发过程过于复杂。这些原则的存在有助于简化开发:它们解决了某些设计问题。但决不要强迫它,否则您可能最终会成为crea为自己解决认知问题。如果它没有损坏,就不要修复它。如果你觉得这是一个问题,并且你真的想避免它,那么继续并发布一个后续问题(保持主题问答):)给出了如何处理德米特定律以及它存在的原因的想法(LOD确保封装)非常感谢。是的,你是对的,我是java的初学者,尽管我用php做了一些MVC模式。我认为在考虑java中的MVC之前,我需要了解更多。非常感谢你的帮助,考虑到我是初学者,这就足够了。
class Personnel {
    private Map<String, Employee> employees = new HashMap<>();

    public void addEmployee(Employee employee) {
        employees.put(employee.getName(), employee);
    }

    public Details getEmployeeDetails(String name) {
        return employees.get(name).getDetails();
    }
}

class Employee {
    private String name; //could be stored in Details
    private Details details;

    public Employee(String name, Details details) {
        this.details = details;
    }

    public Details getDetails() {
        return details;
    }

    public String getName() {
        return name;
    }
}

class Details {
    private PayInfo payInfo;
    private Address address;

    public Details(PayInfo payInfo, Address address) {
        this.payInfo = payInfo;
        this.address = address;
    }

    public PayInfo getPayInfo() {
        return payInfo;
    }

    public Address getAddress() {
        return address;
    }
}
public static void main(String[] args) {
    PayInfo info = ...;
    Address address = ...;
    Details details = new Details(info, address);

    String name = ...
    Employee employee = new Employee(name, details);

    Personnel personnel = new Personnel();
    personnel.addEmployee(employee);

    //example
    Details employeeDetails = personnel.getEmployeeDetails("Some Name");
    Address employeeAddress = employeeDetails.getAddress();
    System.out.println(employeeAddress.getStreetAddress());
}