Mik*_*ike 0 java types interface
请考虑以下两个包含我的问题的简化版本的Java文件
#a.java
package a;
public interface I {
//...
}
#b.java
package b;
public interface I {
//... (different stuff from a.I)
}
Run Code Online (Sandbox Code Playgroud)
您会注意到我的项目中有两个名为"I"的接口.这不能改变.我处于一种需要在单个类中使用这两种类型的情况.当然,我当然可以将它们的每个类型作为aI和bI引用,但我试图除了保持可读性之外什么也不做.
我想做这样的事情
interface B extends b.I {
}
Run Code Online (Sandbox Code Playgroud)
这可以让我通过使用B来使用I的接口,并且通过导入使用aI作为我.问题是这不起作用,让我们用这个具体的例子
interface MyList extends List<String> {
}
MyList l = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
这会产生类型错误.为什么Java"不知道"MyList扩展了List?
另外,我在上面的例子中尝试过转换,但是它会生成一个ClassCastException
思考?
这是有效的:
List<String> list = new MyList();
Run Code Online (Sandbox Code Playgroud)
这不是:
MyList l = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
ArrayList不是MyList.他们只是有一个共同的超级接口.这就是为什么它不起作用.Java"知道" MyList是一个,List但这并不意味着你可以分配List给它.
考虑:
public interface MyList extends List<String> {
void foo();
}
MyList l = new ArrayList<String>();
l.foo();
Run Code Online (Sandbox Code Playgroud)
显然ArrayList没有这个foo()方法.