过去几天我一直在试着解决这个问题,并且搜索我能想到的一切都无济于事。
我有一个类通过接口与另一个进行交互。我遇到了一些类型不匹配错误,代码对我来说似乎很简单。
public class FooBar {
Foo<? extends Bar> X = new Y();
public void test(){
if X.isA(X.B()){
//do something; type mismatch here
}
}
}
接口:
public interface Foo<T extends Bar> {
public T B();
public boolean isA(T t);
}
实现:
public class Y implements Foo<T extends Bar> {
public int B(){
return 5;
}
public boolean isA(int num){
int A = 10;
return (A == num) ? true : false;
}
我的问题是方法测试()。我通过接口获取一个数字,然后使用相同的实现类实例测试它,但这给了我一个捕获/类型不匹配错误。
CAP#1从禁止捕获?延伸吧
CAP#2从禁止捕获?延伸吧
我尝试了很多我在搜索中找到的东西,但没有一个能够奏效。泛型和接口对我来说是新的,我还在学习它们。感谢您提前提供任何帮助!
答案 0 :(得分:0)
我已经更新了你的课程(为了清楚起见,我添加了缺少的Bar类)。
您现在可以运行FooBar.main()
方法并获得您期望的结果:
public class FooBar {
Foo x = new Y();
public void test(){
if(x.isA(x.B())){
System.out.println("x.isA!");
}
}
public static void main(String... args){
FooBar fb = new FooBar();
fb.test();
}
}
public interface Foo<T extends Bar> {
T B();
boolean isA(T t);
}
public class Bar {}
public class ExtendsBar extends Bar {
@Override
public String toString(){
return "Yes I extend Bar";
}
}
public class Y implements Foo<ExtendsBar> {
public ExtendsBar B() {
return new ExtendsBar();
}
public boolean isA(ExtendsBar num) {
return (num instanceof Bar);
}
}