Лямбда-реализация функционального интерфейса возвращает ошибку «не реализованные методы» - но программа работает - PullRequest
0 голосов
/ 11 марта 2020

Я использую Eclipse для изучения Java дженериков и лямбда-основ, и я столкнулся с проблемой при реализации функционального интерфейса. Я хотел реализовать метод с помощью лямбда-выражения, но потом компилятор постоянно показывает «Тип MyGenericClass должен реализовывать унаследованный абстрактный метод FunctionalIfce.getType ()», хотя я реализовал его с помощью лямбда-выражения и позже даже использовал в программе. При запуске проблем нет - все результаты верны, но ошибка сохраняется. Все в одной упаковке. Вот реализации:

import java.lang.reflect.Type;

@FunctionalInterface
public interface FunctionalIfce {
    Type getType();
}
import java.lang.reflect.Type;

public class MyGenericClass<T extends Number> 
                    implements FunctionalIfce{

    private T value;

    // Lambda implementation of interface
    public FunctionalIfce fIfce = () -> {
        Type parameterType = value.getClass();
        return parameterType;
    };

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "The value is equal: "+value+" and it's type: "+fIfce.getType();
    }

    //Stadard implementation ###  Lambda implementation above
    /*
    @Override
    public Type getType() {
        Type parameterType = value.getClass();
        return parameterType;
    }
    */

}

И из Главного класса я называю это следующим образом:

    public class AdvancedEntry {

        public static void main(String[] args) {
            MyGenericClass<Integer>  generic = new MyGenericClass<>();
            generic.setValue(5);
            System.out.println(generic.toString());         
        }

    }

Это проблема затмения или я допустил ошибку в своей реализации что волшебным образом работает? Я буду очень признателен за любую помощь по этой головоломке, так как я не нашел ничего, что отдаленно напоминало бы мою проблему.

1 Ответ

0 голосов
/ 11 марта 2020

Вам нужно удалить реализацию интерфейса, и она работает.

import java.lang.reflect.Type;

public class MyGenericClass<T extends Number>{

    private T value;

    // Lambda implementation of interface
    public FunctionalIfce fIfce = () -> {
        Type parameterType = value.getClass();
        return parameterType;
    };

    public T getValue() {
        return value;
    }

    public void setValue(T value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "The value is equal: "+value+" and it's type:    "+fIfce.getType();
    }


    //Stadard implementation ###  Lambda implementation above
    /*
    @Override
    public Type getType() {
        Type parameterType = value.getClass();
        return parameterType;
    }
    */

}
...