关于java.lang.ClassCastException

首先贴出我的代码,这个程序主要是实现员工的增删改查,但是其中一部分功能没有实现,一些是空的构造方法

Menu菜单类

package com.gem.homework;

import java.util.Iterator;
import java.util.TreeSet;

public class Menu{

	TreeSet t = new TreeSet();
	public Menu() {
		Employee employee01 = new Employee(001, "张3", 15, "宣传部");
		Employee employee02 = new Employee(002, "张4", 16, "心理部");
		Employee employee03 = new Employee(003, "张5", 17, "办公室");
		Employee employee04 = new Employee(004, "张6", 18, "体育部");
		Employee employee05 = new Employee(005, "张7", 19, "网宣部");
		Employee employee06 = new Employee(005, "张7", 19, "铁道部");
		t.add(employee06);
		t.add(employee05);
		t.add(employee04);
		t.add(employee03);
		t.add(employee02);
		t.add(employee01);
		
		
	}

	public void printMenu() {
		// TODO Auto-generated method stub
		System.out.println("---欢迎进入系统---");
		System.out.println("---1.查看所有  ---");
		System.out.println("---2.查找员工  ---");
		System.out.println("---3.新增员工  ---");
		System.out.println("---4.修改信息  ---");
		System.out.println("---5.员工离职  ---");
		System.out.println("---6.退出系统  ---");
	}

	public void checkInfos() {
		// TODO Auto-generated method stub
		Iterator iter = t.iterator();
		while (iter.hasNext()) {
			System.out.println(iter.next());
		}
	}

	public void lookInfos() {
		// TODO Auto-generated method stub
		
	}

	public void addEmployee() {
		// TODO Auto-generated method stub

	}

	public void reviseEmployee() {
		// TODO Auto-generated method stub

	}

	public void delEmployee() {
		// TODO Auto-generated method stub

	}

	public boolean exitSystem() {
		// TODO Auto-generated method stub
		return false;
	}


	
}

Employee员工类

package com.gem.homework;

public class Employee {
	private int eId;
	private String ename;
	private int age;
	private String department;

	public int geteId() {
		return eId;
	}

	public void seteId(int eId) {
		this.eId = eId;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	public Employee(int eId, String ename, int age, String department) {
		this.eId = eId;
		this.ename = ename;
		this.age = age;
		this.department = department;
	}

	@Override
	public String toString() {
		return "Employee [eId=" + eId + ", ename=" + ename + ", age=" + age
				+ ", department=" + department + "]";
	}
	
	
}
Test测试类
package com.gem.homework;

import java.util.Scanner;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入相应的数字进行功能操作");
		Menu m = new Menu();
		boolean flag = true;

		while (flag) {
			m.printMenu();
			int input = sc.nextInt();

			switch (input) {
			case 1:
				m.checkInfos();
				break;
			case 2:
				m.lookInfos();
				break;
			case 3:
				m.addEmployee();
				break;
			case 4:
				m.reviseEmployee();
				break;
			case 5:
				m.delEmployee();
				break;
			case 6:
				flag = m.exitSystem();
				break;
			default:
				System.out.println("输入有误");
				break;
			}

		}
	}

}
当这个程序运行时,会出现这个错误:
Exception in thread "main" java.lang.ClassCastException: com.gem.homework.Employee cannot be cast to java.lang.Comparable
	at java.util.TreeMap.compare(Unknown Source)
	at java.util.TreeMap.put(Unknown Source)
	at java.util.TreeSet.add(Unknown Source)
	at com.gem.homework.Menu.<init>(Menu.java:16)
	at com.gem.homework.Test.main(Test.java:14)

我找了好半天没有找到错误的原因所在,于是我就去百度,查找相关的视频,但是都没有找到结果,但是在我翻书的过程种突然想到Employee员工类中还没有写实现TreeSet的比较方法,于是我就在Employee中添加了这样的一段代码:

其中的原因是父类转换到子类时会发生ClassCastException异常,没有重写compareTo的方法,添加上之后就不会出现程序运行错误。

猜你喜欢

转载自blog.csdn.net/qq_34668848/article/details/80656551