У меня есть следующий код, я хотел узнать, как получить доступ к public method:locationFinder в private inner class:LocationBasedFormatter outer class:LocationFormatter.

В основном я хотел бы получить доступ к методу locationFinder из MyClass и получить List<String>

@Getter
@Setter
public class LocationFormatter {

    public static final Formatter Location(String longitute, String latitude) {
        return new LocationBasedFormatter(longitute, latitude)
    }

    public static interface Formatter {}

    @AllArgsConstructor
    private static final class LocationBasedFormatter implements Formatter {
        private String longitute;
        private String latitude;

        public final List < String > locationFinder() {
            String location = "Your Long: " + this.longitute + " Your Lat: " + this.latitude;
            List < String > randomList = new ArrayList < String > ()
            randomList.add(location)
            return randomList;
        }

    }
}

Ниже приведен другой мой основной класс, из которого мне нужно передать значение и получить доступ к методу locationFinder :

public class MyClass {
    public static void main(String args[]) {
        LocationFormatter loc = new LocationFormatter();
        LocationBasedFormatter result = loc.Location("44.54", "94.54");
    }
}

Когда я пытаюсь найти объекты / методы на loc или result, я не могу найти свой метод locationFinder. Я хотел бы получить доступ к методу locationFinder и получить List на основе значений, которые я передал моей частной переменной.

Я немного запутался и не могу получить метод в другом классе. Однако, если я напишу основной метод в том же классе, я смогу получить к нему доступ.

-2
BATMAN_2008 18 Янв 2021 в 13:39

2 ответа

Лучший ответ

Похоже, вам нужно объявить метод locationFinder в интерфейсе Formatter и использовать этот интерфейс (который в настоящее время является просто интерфейсом маркера) вместо его конкретной реализации в частном классе:

public static interface Formatter {
    List<String> locationFinder();
}

Тогда этот метод будет доступен публично:

public class MyClass {
    public static void main(String args[]) {
        // no need to instantiate LocationFormatter, Location is static method
        Formatter result = LocationFormatter.Location("44.54", "94.54");

        List<String> locationList = result.locationFinder();
    }
}

Однако для классов и методов в этом коде следует использовать более описательные имена.

1
Alex Rudenko 18 Янв 2021 в 11:08

Технически LocationBasedFormatter не является внутренним классом. Это статический вложенный класс.

Добавьте метод public static getLocationBasedFormatterInstance() в класс LocationFormatter. Этот getLocationBasedFormatterInstance() может вернуть экземпляр LocationBaedFomratter

public class LocationFormatter {
  ... 
  public static getLocationBasedFormatterInstance(){
     LocationBasedFormatter lbf = new LocationBasedFormatter();
     return lbf;

  }

}

Затем вы должны создать объект вашего статического вложенного класса LocationBasedFormatter из вашего основного метода.

LocationFormatter.LocationBasedFormatter locationFormatter = new LocationFormatter();
LocationBaedFomratter loationBasedFomratter = locationFormatter.getLocationBasedFormatterInstance();
0
Razib 18 Янв 2021 в 11:33