如何在界面中定义泛型返回?

时间:2013-08-25 16:20:44

标签: java generics

我的实现看起来像这样。

@Override
public <T extends AlgorithmSuperType> T doSomethingSmart(){
    //do this and that
}

如何定义此通用返回值的接口? Eclipse建议使用此接口定义。

T doSomethingSmart();

当我接受快速修复时,Eclipse会发现它的错误,并建议先加<T>

<T> T doSomethingSmart();

接口的这些快速修复程序都不能解决@Override实现中的冲突。

如何正确定义界面?

3 个答案:

答案 0 :(得分:3)

界面看起来像这样:

interface YourInterfaceName {
    <T extends AlgorithmSuperType> T doSomethingSmart();
}

它定义了一个带有通用方法的接口,这是您的实现定义的。

答案 1 :(得分:1)

由于T是一个通用参数,因此您需要将方法或类声明为通用参数。 Eclipse正在建议第一种选择。以下是第二步:

public class<T extends AlgorithmSuperType> MyClass implements SomeInterface<T> {
    @Override
    public T doSomethingSmart(){
        //do this and that
    }
}

请注意,界面应为

public interface<T extends AlgorithmSuperType> SomeInterface {
    T doSomethingSmart();
}

public interface SomeInterface {
    <T extends AlgorithmSuperType> T doSomethingSmart();
}

(在后一种情况下,MyClass应该是“实现SomeInterface”而不是implements SomeInterface<T>

答案 2 :(得分:0)

如果是界面,那么您可以使用:

AlgorithmSuperType fetchAlert();

但是从这种类型继承的所有其他类也都可以,不仅仅是。