实现通用接口时方法参数错误

时间:2019-08-15 16:38:55

标签: java generics functional-interface

在用Java实现基本的通用接口时,我无法使用我为接口提供的参数化类型覆盖已实现的方法

我创建了一个匿名类来实现我创建的通用功能接口,但是当我尝试使用相同的参数化类型重写方法时,编译器说我的实现不正确,并且方法参数应该是Object而不是字符串(我提供给通用接口的参数化类型)

这是我的界面


@FunctionalInterface
public interface MyFuncInterface<T> {


    public void acceptAndPrint(T t);

}

这是我试图通过匿名类实现此目标的代码段

MyFuncInterface<String> myFunc2 = new MyFuncInterface(){
            @Override
            public void acceptAndPrint(String s){
                System.out.println(s);
            }
        }

以这种方式处理时,出现编译器错误

  

新类型MyFuncInterface(){}必须实现继承的抽象方法MyFuncInterface.acceptAndPrint(Object)

我很确定我在这里缺少泛型概念,但是我无法弄清楚当我将参数化参数<T>提供为String时,为什么还要期待我的方法将参数作为Object类型而不是String类型吗?答案是否与调整与通用方法有关的东西有关?

2 个答案:

答案 0 :(得分:0)

意识到我的错误,我没有在初始化期间提供参数化类型参数,而只是在声明中提供了参数。

MyFuncInterface<String> myFunc = new MyFuncInterface<String>() {

            @Override
            public void acceptAndPrint(String t) {
                // TODO Auto-generated method stub

            }
        };

答案 1 :(得分:0)

您可以将该类的类对象或子类对象作为参数传递给方法。 请以泛型为https://www.geeksforgeeks.org/bounded-types-generics-java/

的Bounded类型为例