тип не виден — метод получения

#java #junit #getter

#java #junit #getter

Вопрос:

 public class car {
private String make;
private String model;
private int mileage;
private int year;
private float price;

public car(String make, String model, int mileage, int year, float price) {
    this.make = make;
    this.model = model;
    this.mileage = mileage;
    this.year = year;
    this.price = price;
} 

private String getMake() {
    return make;
}

private String getModel() {
    return model;
}

private int getMileage() {
    return mileage;
}

private int getYear() {
    return year;
}

private float getPrice() {
    return price;
}

public String toString() {
    return "Make:" getMake() "nModel:" getModel() "nMileage:" getMileage() "nYear:" getYear() "nPrice:" getPrice();
}



class carTest {
private String[] carToStringArray(car c) {
    String[] carInfo = {c.getMake(), c.getModel(), Integer.toString(c.getMileage()), 
            Integer.toString(c.getYear()), Integer.toString(c.getPrice())};
    return carInfo;
}

@Test
void verifyCarEqualityWithMakeModelYear() {
    String[] expected = {"Toyota", "RAV4", "2018"};
    car actual = new car("Honda", "Altima",45000, 2015, 12000);
    assertArrayEquals(expected, carToStringArray(actual));
}
  

}

У меня ошибка в carToStringArray(). В c.getMake(), c.getModel(), c.getMileage(), c.getYear(), c.getPrice() есть красное подчеркивание. Я получил сообщение об ошибке, что «Метод getMake () из типа car не виден», но у меня есть этот метод в классе car. Могу ли я узнать, что не так с моим тестовым кодом?

Ответ №1:

Если вы обращаетесь к своим методам получения извне класса, вам необходимо изменить видимость. Например. на public :

 public String getMake() {
    return make;
}
  

Вы можете прочитать больше об этом в официальном документе java.

Ответ №2:

Все геттеры есть private , поэтому их нельзя использовать извне класса. Вы должны определить их как public или, по крайней мере, иметь видимость по умолчанию, предполагая, что car и carTest находятся в одном пакете.

Ответ №3:

getMake , getModel , getMileage и другие подобные методы — все они называются геттерами. И в вашем коде модификатор доступа, который вы используете для них, является private . Это означает, что эти методы получения не будут доступны за пределами этого класса.

Если вы хотите вызвать эти методы из-за пределов этого класса, вам придется повысить модификатор доступа.

Обычно мы создаем геттеры public , но это всего лишь соглашение, и нет строгого правила, которое обязывает вас это делать.

Прочитайте эту статью, чтобы получить подробное представление об этой теме.