与我的代码相似的示例代码。
public interface Builder<B, A> {
B build(A a);
}
public class ClientBuilder implements Builder<String, Integer> {
@Override
public String build(Integer i) {
return i.toString();
}
}
public abstract class Client<B> {
protected abstract <A> Builder<B, A> getBuilder();
}
public class ClientClient extends Client<String> {
@Override
protected Builder<String, Integer> getBuilder() {
return null;
}
}
在我的ClientClient
类中,我收到一条警告,内容如下:
Unchecked overriding: return type requires unchecked conversion.Found 'Builder<java.lang.String,java.lang.Integer>', required 'Builder<java.lang.String,A>
有什么办法可以解决这个错误?
我可以使用@SuppressWarnings("unchecked")
,但是感觉不对。
在我的示例中,A
始终是Integer
,但在我的真实代码中,A
可以是两个对象之一。
我想我的界面中也可以有两个方法,如下所示:
public interface Builder<B> {
B build(Integer i);
B build(String s);
}
答案 0 :(得分:3)
这不能正确覆盖方法:
protected Builder<String, Integer> getBuilder() {
return null;
}
您缺少类型变量。
可以正确声明:
protected <A> Builder<String, A> getBuilder() {
return null;
}
或更改类声明以允许您提供第二个类型参数:
public abstract class Client<B, A> {
protected abstract Builder<B, A> getBuilder();
}