gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:59 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com