‘E расширяет объект, объявленный в классе Vector, даже после использования обобщений

#java #oop #vector #warnings

#java #ооп #вектор #предупреждения

Вопрос:

Я уже много времени пытаюсь скомпилировать следующий код, но я всегда получаю предупреждение:

  warning: [unchecked] unchecked call to addElement(E) as a member of the raw type Vector
  v.addElement(obj);
              ^
  where E is a type-variable:
    E extends Object declared in class Vector
  

Это происходит, хотя я объявил свой вектор с использованием generics. Не могли бы вы, пожалуйста, помочь мне?

 import java.util.*;

public class Employee {
    
    String name;
    float sal;
    int id;

    public static void main(String args[]) {
        Vector<Employee> vec = new Vector<Employee>();
        int n, ch;
        System.out.println("Enter the number of employees");
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        Create(vec, n);
        System.out.println("Enter any 1 of the following choices ");
        System.out.println("1 to insert a new record");
        System.out.println("2 to delete an Employee record by name");
        System.out.println("3 to delete by the ID");
        ch = sc.nextInt();
        switch (ch) {
            case 1:
                {

                }
            case 2:
                {

                }
        }
    }

    public static void Create(Vector v, int n) {
        String ename;
        float esal;
        int eid;
        int i;
        Scanner sc1 = new Scanner(System.in);
        for (i = 0; i < n; i  ) {
            System.out.println("Enter the ID");
            eid = sc1.nextInt();
            System.out.println("Enter the name");
            ename = sc1.next();
            System.out.println("Enter the salary");
            esal = sc1.nextFloat();
            Employee obj = new Employee();
            obj.name = ename;
            obj.sal = esal;
            obj.id = eid;
            v.addElement(obj);

        }

    }
}
  

В этой программе я объявил класс Employee и намереваюсь вызывать Create метод n несколько раз для добавления сведений о n сотрудниках до этого, а затем выполнять другие функции.
Однако я изначально получил Xlint: непроверенное предупреждение, и после его повторной компиляции с Xlint: непроверенное имя файла я все еще получаю это предупреждение и не могу продолжить. Не могли бы вы мне помочь, пожалуйста?

Ответ №1:

Аргумент v в вашем Create методе объявлен как необработанный тип. Попробуйте добавить универсальный тип в объявление параметра, например:

public static void Create(Vector<Employee> v, int n) {

Вы можете прочитать больше о необработанных типах по следующей ссылке:

https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html

Комментарии:

1. Большое вам спасибо!! Это решило мою проблему!!