Как я могу проверить, совпадают ли параметры в конструкторе интерфейса и класса? - PullRequest
0 голосов
/ 18 октября 2019

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

Пожалуйста, помогите TvT

У меня есть интерфейс, который называется автомобиль со следующими методами:

public String getName();
public int getTopSpeed ();
public int getMaxPassengers ();

Я устал:

if (v.getMaxParameters <0 || maxParameter <0) 
     throw new IllegalArgumentException(); 
else 
     return maxParameter;

но яполучить ошибку nullpointerexception, и да, я, вероятно, делаю это совершенно неправильно. я так растерялся ....

public class Car implements Vehicle {

    String name;
    int speed;
    int maxPassenger;
    double weight;
    public Vehicle v;

    public Car(String name, int speed, int maxPassenger, double weight) {       
        if (v.getName().length() <0)
            throw new IllegalArgumentException ();
        else 
            this.name = name;

        if (speed < 0)
            throw new IllegalArgumentException ();
        else 
            this.speed = speed;

        if (maxPassenger <0)
            throw new IllegalArgumentException();
        else 
            this.maxPassenger = maxPassenger;

        if (weight<0 )
            throw new IllegalArgumentException();
        else
            this.weight= weight;
    }
}

Это то, что я пытаюсь проверить, и это должно быть "неудачей", поскольку пассажиры разных ценностей.

try {  
    Vehicle v = new Car(" ", 280, 5, 2.1);
    Car c = new Car("BMW", 280, 5, 2.1);
    System.out.println(v.getName());
    System.out.println(v.getTopSpeed());
    System.out.println(c.getMaxPassengers());
    System.out.println(c.getWeight());
} catch (IllegalArgumentException ex) {
    System.out.println("failure");
}

и это тоже ошибка, так как имена разные / пусто

EIDITED

1 Ответ

0 голосов
/ 19 октября 2019

Я редактирую ответ после уточнения. Мы можем просто переопределить equals или реализовать Comparator для сравнения. Если экземпляры другого типа не имеют смысла и equals возвращает false, но если они одного типа, мы можем сравнить их

interface Vehicle
{
    public String getName(); 
    public int getSpeed();
    public int getMaxPassenger();
}

class Car implements Vehicle {

    public static void main(String[] args) {
        Vehicle v = new Car("abc", 1, 1, 2);
        Car c = new Car("abc", 1, 1, 2);
        if (v.equals(c))
            System.out.print("They are equal");
        else
            System.out.print("They are not equal");
    }

    String name;
    int speed;
    int maxPassenger;
    double water;

    public Car(String name, int speed, int maxPassenger, double water) {       
        if (name == null || name.isEmpty())
            throw new IllegalArgumentException ();
        else 
            this.name = name;

        if (speed < 0)
            throw new IllegalArgumentException ();
        else 
            this.speed = speed;

        if (maxPassenger <0)
            throw new IllegalArgumentException();
        else 
            this.maxPassenger = maxPassenger;

        if (water <0 )
            throw new IllegalArgumentException();
        else
            this.water = water;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public int getMaxPassenger() {
        return maxPassenger;
    }

    public void setMaxPassenger(int maxPassenger) {
        this.maxPassenger = maxPassenger;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + maxPassenger;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + speed;
        long temp;
        temp = Double.doubleToLongBits(water);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Car other = (Car) obj;
        if (maxPassenger != other.maxPassenger)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (speed != other.speed)
            return false;
        if (Double.doubleToLongBits(water) != Double.doubleToLongBits(other.water))
            return false;
        return true;
    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...