1. 程式人生 > >Hashtable與ArrayListTest編譯問題:使用了未經檢查或不安全的操作;請使用 -Xlint:unchecked 重新編譯

Hashtable與ArrayListTest編譯問題:使用了未經檢查或不安全的操作;請使用 -Xlint:unchecked 重新編譯

ArrayList staff = new ArrayList();
Hashtable table = new Hashtable();

在編譯java原始檔時,如果你的jdk是1.5或者以上,會出現“使用了未經檢查或不安全的操作;請使用 -Xlint:unchecked 重新編譯。”這樣的警告,原因是JDK 1.5中集合類的例項建立方式與JDK 1.4的有一些不同,JDK 1.5 裡面引入很多新的特性。當你使用諸如java.util.Hashtablejava.util.ArrayList等收集類(Collection)時,需要注意 JDK 1.5 裡面支援所謂的 Generic Class,也就是引數化型別,如果沒有指定型別引數(JDK 1.5 以前的編碼),則 JDK 1.5 編譯器由於無法檢查 給出的引數是否合乎要求,而報告 unchecked 警告,這並不影響執行。按照提示,編譯是指定引數即可取消這樣的警告。或者為其制定型別引數。修改成如下程式碼即可:

import java.util.*;

public class ArrayListTest
{
     public static void main(String[] args)
     {
         ArrayList<Object> staff = new ArrayList<Object>();
staff.add(new Employee("Calr Cracker", 70000, 1987, 12, 15)); staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1)); staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15)); for (int i = 0; i < staff.size(); i++) { Employee e = (Employee)staff.get(i); e.raiseSalary(5); } for (int i = 0; i < staff.size(); i++) { Employee e = (Employee)staff.get(i); System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + "hireDay=" + e.getHireDay()); } } } class Employee { public Employee(String n, double s, int year, int month, int day) { name = n; salary = s; GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day); hireDay = calendar.getTime(); } public String getName() { return name; } public double getSalary() { return salary; } public Date getHireDay() { return hireDay; } public void raiseSalary(double byPercent) { double raise = salary * byPercent / 100; salary += raise; } private String name; private double salary; private Date hireDay; }

Hashtable<Object,Object> table = new Hashtable<Object,Object>();