如何通过扫描仪输入自定义类值?

时间:2017-05-02 13:36:52

标签: java classcastexception

我正在尝试整理一个小型测试应用程序,它通过扫描程序获取输入,并通过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;
}
}

2 个答案:

答案 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中的值赋给成员