Интерфейсы не могут поддерживать состояние.Проблема в параметре координаты.
Но это не должен быть интерфейс?Вы можете просто использовать класс, как вы уже были.Или, черт возьми, пока вы находитесь в состоянии миграции, просто продолжайте использовать предикаты Гуавы, так как сигнатура типа Предиката Гуавы равна
public interface Predicate<T> extends java.util.function.Predicate<T>
Так что они продолжат работать на Java 8
Из JD Предиката Гуавы:
* <p>As this interface extends {@code java.util.function.Predicate}, an instance of this type may
* be used as a {@code Predicate} directly. To use a {@code java.util.function.Predicate} where a
* {@code com.google.common.base.Predicate} is expected, use the method reference {@code
* predicate::test}.
Пример кода, если вы хотите портировать.
public class InSectorPredicate8 implements java.util.function.Predicate<Unit> {
private final SectorCoords coords;
public InSectorPredicate8(SectorCoords coords) {
this.coords = coords;
}
@Override
public boolean test(Unit unit) {
return unit.getCoords().equals(coords);
}
}
Но, в зависимости от точного использования, большую часть времени вы будете создавать InSectorPredicate., вы могли бы просто сделать
Predicate<Unit> InSectorPredicate = new InSectorPredicate(coords);
мигрирует в
Predicate<Unit> InSectorPredicate = (Unit unit) -> unit.getCoords().equals(coords);