Я пытаюсь закодировать собственный пользовательский класс Bag в java. Для этого я использую карту, где Car является экземпляром класса.Пользовательский класс сумм с использованием карты не позволяет мне вызывать методы из экземпляра класса, который является ключом
В моем коде я не могу вызвать функцию из класса Car, но я не могу понять, почему.
Вот код для лучшего понимания.
BagTest.java
public class BagTest {
public static void main(String[] args) {
Car c1 = new Car("Model1", 15000);
Car c2 = new Car("Model2", 20000);
Car c3 = new Car("Model3", 12000);
Bag bag = new Bag<Car>();
bag.add(c1);
bag.add(c2, 2);
bag.add(c3);
}
}
Car.java
final class Car implements Comparable<Car> {
private final String _name;
private final int _price;
public Car(String name, int price) {
this._name = name;
this._price = price;
}
public String getName() {
return (_name);
}
public int getPrice() {
return (_price);
}
public boolean equals(Object car) {
if (!(car instanceof Car))
return (false);
Car c = (Car)car;
return (this._name.equals(c._name) && this._price == c._price);
}
public String toString() {
return (this._name + " " + this._price);
}
public int hashCode() {
return (31 * this._name.hashCode() * this._price);
}
@Override
public int compareTo(Car car) {
if (car == null)
return (-1);
if (this._price < car._price)
return (-1);
if (this._price == car._price)
return (0);
else
return (1);
}
}
Bag.java
class Bag <Car extends Comparable<Car>> implements Iterable<Car> {
private Map<Car, Integer> _bag;
public Bag() {
this._bag = new TreeMap<>();
}
public void add(Car car) {
if (car == null)
return;
if (this._bag.containsKey(car))
this._bag.put(car, this._bag.get(car) + 1);
else
this._bag.put(car, 1);
}
public void add(Car car, int qty) {
if (car == null || qty == 0)
return;
if (this._bag.containsKey(car))
this._bag.put(car, this._bag.get(car) + qty);
else
this._bag.put(car, qty);
}
public void getCarsName() {
for (Car car : this) {
car.getName(); // HERE IS THE PROBLEM
}
}
public Iterator<Car> iterator() {
List<Car> carsList = new ArrayList<>();
for (Car car: _bag.keySet())
{
int fr = _bag.get(car);
for (int j = 0; j < fr; j++)
carsList.add(car);
}
return (carsList.iterator());
}
}
Задача
Проблема в том, что я не могу найти какой-либо метод/переменную автомобиля. В приведенном выше коде я не могу получить метод .getName() (в функции getCarsName(), в файле Bag.java), это похоже на то, что метод не существует.
Также я не могу создать новый автомобиль в классе Bag, у меня возникла следующая ошибка: «Параметр типа« Автомобиль »не может быть создан непосредственно». Кажется, что это связано с проблемой и будет казаться, что проблема исходит из класса Car, но я не могу понять, где она.
Заранее спасибо.
Поскольку каждый класс имеет объект как supperclass в java, это не изменит никакого значения. Я проверял, чтобы быть уверенным, но да, это ничего не меняет в этой проблеме. – Havli
Да, каждый класс прямо или косвенно распространяется на объект, но это не значит, что вы можете вызвать метод, определенный в подтипе, посредством ссылки типа Object. – pgiecek
Фактически, я только что проверил, и объект получил другое поведение, чем я думал, я изменил свой код, но проблема все еще здесь. – Havli