java - 接口(interface)的泛化导致编译错误

标签 java generics

Java 7

我有一个界面:

public interface MyInt{
    public Map<String, WhereClause> createClauses(Parameters<Object> params);
}

及其一些实现:

public class MyImpl implements MyInt{

    @Override
    public Map<String, WhereClause> createClauses(Parameters<Object> p) { //1
        //return some
    }
}

现在,我可以让它的返回类型成为通用的。我试过这个:

public interface MyInt <T extends SomeType>{
    public Map<String, ? extends WhereClause> createClauses(Parameters<Object> params);
}

但是我在 //1 的实现中遇到了编译时错误:

The method createClauses(Parameters<Object>) of type `MyImpl` must
override or implement a supertype method

但是当我删除泛化时,实现可以正常编译。

为什么即使不使用类型参数,泛化也会影响编译。

最佳答案

在几乎所有情况下,当您发现自己在泛型中使用 ? 时,您都做错了:

public interface MyInt<C extends WhereClause> {

    public Map<String, C> createClauses(Parameters<Object> params);
}

private static class MyWhereClause extends WhereClause {

    public MyWhereClause() {
    }
}

public class MyImpl implements MyInt<MyWhereClause> {

    @Override
    public Map<String, MyWhereClause> createClauses(Parameters<Object> p) {
        return null;
    }
}

关于java - 接口(interface)的泛化导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33081684/

相关文章:

java - 扩展另一个泛型类的泛型类的泛型类型参数上绑定(bind)不匹配错误

java - 返回值的钻石运算符

c# - 是否可以创建用于将项目添加到 Entity Framework dbset 的通用方法?

java - Liferay 控制面板编程访问

java - 使用 Java 泛型计算 2 个集合之间逐个元素的算术差异

swift - 是否可以向 Swift 协议(protocol)一致性扩展添加类型约束?

java - 从 OpenGL ES 开始。使用像素绘图

Java泛型通配符

java - 在HttpURLConnection中getErrorStream返回的InputStream中获取服务器发送来的有用数据

java - 将未知数量的数字添加到 arraylist