我正在尝试整理一个小型测试应用程序,它通过扫描程序获取输入,并通过hashmap和tree set将它们放入内存中。
稍后我将搜索,编辑和删除它们(所以基本上是一个CRUD),它需要2个班级员工班级和1个班级班级。我正在尝试为员工提供输入,包括员工的所有信息,包括公司,这是POJO中的外国自定义类对象。
它不会让我上课,我该怎么办?
这是POJO
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String firstName;
private String lastName;
private String ssn;
private Integer salary;
private String birthDate;
private String jobTitle;
@ManyToOne
private Company companyName;
public Employee (String fN, String lN, String SSN, Integer sal, String birth, String jobT, Company compName) {
lastName = lN;
firstName = fN;
SSN = ssn;
sal = salary;
birth = birthDate;
jobT = jobTitle;
compName = companyName;
}
public String toString()
{
return "Employee[Last Name= " + lastName + ", First Name= " + firstName + " SSN= " + ssn + ","
+ "Salary= " + salary + ", Birth Date= " + birthDate + ", Job Title= " + jobTitle + ",]" ;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getSsn() {
return ssn;
}
public void setSsn(String ssn) {
this.ssn = ssn;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
public String getBirthDate() {
return birthDate;
}
public void setBirthDate(String birthDate) {
this.birthDate = birthDate;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public Company getCompanyName() {
return companyName;
}
public void setCompanyName(Company companyName) {
this.companyName = companyName;
}
}
以下是扫描仪所在类的一部分
System.out.println("Enter Company Name : ");
String val7 = input1.nextLine();
...
Employee newEmp = new Employee(str1,str2, str3, val4, str5, str6, val7);
如果我传入str7,它显然会产生错误,因为该方法采用CompanyName。
我知道我需要做什么,因为ClassCast在这里不起作用。
编辑这里是公司课程 公共类公司{ @ID @GeneratedValue(策略= GenerationType.AUTO) 私人长身份; String companyName; 私有字符串描述;
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
答案 0 :(得分:0)
你只有一半的方式:
像:
while (something) {
String newFirstName = scanner.next();
...
int newSalary = scanner.nextInt();
...
Employee newGuy = new Employee(newFirstName, ...
换句话说:扫描仪只知道如何提供那些特定的"内置"类型,如String,int,float,...
因此:如果您需要这些类型的汇总,您可以手动收集它们#34;。
在您的情况下:首先要求公司。含义:让用户首先进入公司;并且您的代码创建公司对象。例如,您可以将它们放入Map<String, Company>
。现在,在进入员工时,你要求公司名称最后;然后你的代码检索公司对象的输入名称。
答案 1 :(得分:0)
您需要创建公司实例,不要将其作为字符串传递:
System.out.println("Enter Company Name : ");
String val7 = input1.nextLine();
Company company = new Company();
company.setCompanyName(val7);
并在创建company
val7
代替Employee
Employee newEmp = new Employee(str1,str2, str3, val4, str5, str6, company);
ALSO 您在构造函数中遇到逻辑错误,此
compName = companyName;
应该是另一种方式......像这样
companyName = compName;
因为您想将param中的值赋给成员