Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Avoid Unchecked Call Warnings

I have the following code (part of it)

public class Garage<T extends Vehicle>{

    private HashMap< String, T > Cars;
    private int Max_Cars;
    private int Count;

    public Garage(int Max_Cars)
    {
        Cars = new HashMap< String, T >();
        this.Max_Cars = Max_Cars;
        Count = 0;
    }

    public void add(T Car) throws FullException
    {
        if (Count == Max_Cars)
            throw new FullException();

        if (Cars.containsKey(Car.GetCarNumber()))
            return;

        Cars.put(Car.GetCarNumber(), Car);

        Count = Count + 1;

    }

.........
.........
}


public class PrivateVehicle extends Vehicle{

    private String Owner_Name;

    public PrivateVehicle(String Car_Number, String Car_Model, 
            int Manufacture_Yaer, String Comment, String Owner_Name)
    {
        super(Car_Number, Car_Model, Manufacture_Yaer, Comment);
        this.Owner_Name = Owner_Name;
    }
.........
.........
}

This is the main method (part of it)

    public static void main(String[] args) {

.........
.........

     Garage CarsGarage = new Garage(20);

.........
.........

     System.out.print("Owner Name:");
     Owner_Name = sc.nextLine();

     PrivateVehicle PrivateCar = new PrivateVehicle(Car_Number, Car_Model,
                            Manufacture_Yaer, Comment, Owner_Name);

     try{
       CarsGarage.add(PrivateCar);
     }
     catch (FullException e){
       continue;
     }

.........
.........
}

Hope the code is clear. Vehicle is the super class and it only contains some more details about the car. The Garage class suppose to hold all of the cars in a hashmap. There are two types of cars, PrivateVehicle which is mention the code and LeesingVehicle which is not, both are subclasses of Vehicle.

when I try to compile it using javac -Xlint:unchecked *.java, I get the following

Main.java:79: warning: [unchecked] unchecked call to add(T) as a member of the raw type Garage
                        CarsGarage.add(PrivateCar);
                                      ^
  where T is a type-variable:
    T extends Vehicle declared in class Garage
Main.java:97: warning: [unchecked] unchecked call to add(T) as a member of the raw type Garage
                        CarsGarage.add(LeasedCar);
                                      ^
  where T is a type-variable:
    T extends Vehicle declared in class Garage
Main.java:117: warning: [unchecked] unchecked conversion
                    CarsList = CarsGarage.getAll();
                                                ^
  required: ArrayList<Vehicle>
  found:    ArrayList
3 warnings

How can I avoid this warnings?

Thanks.

like image 463
user2102697 Avatar asked Nov 30 '25 15:11

user2102697


1 Answers

Garage CarsGarage = new Garage(20);

Here you are not specifying a type parameter for Garage, which is actually a generic class Garage<T extends Vehicle>. You need:

Garage<Vehicle> CarsGarage = new Garage<Vehicle>(20);
like image 189
zw324 Avatar answered Dec 02 '25 05:12

zw324



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!