考虑以下两个 Java 文件,其中包含我的问题的简化版本
#a.java
package a;
public interface I {
//...
}
#b.java
package b;
public interface I {
//... (different stuff from a.I)
}
您会注意到在我的项目中有两个名为“I”的接口(interface)。这是无法改变的。 我面临的情况是需要在一个类中使用这两种类型。当然,现在我可以将它们的每种类型引用为 a.I 和 b.I,但我只是为了保持可读性而试图避免它。
我想做这样的事情
interface B extends b.I {
}
这可以让我通过使用 B 和 a.I 来使用 I 的接口(interface),并通过导入将 a.I 作为 I 来使用。问题是这行不通,让我们用
来看看这个具体的例子interface MyList extends List<String> {
}
MyList l = new ArrayList<String>();
这会产生类型错误。为什么 Java 不“知道”MyList 扩展了 List?
此外,我在上面的示例中尝试过强制转换,但它会生成 ClassCastException
想法?
最佳答案
这是有效的:
List<String> list = new MyList();
这不是:
MyList l = new ArrayList<String>();
ArrayList
不是 MyList
。他们只是有一个共同的 super 接口(interface)。这就是为什么它不起作用。 Java“知道”MyList
是一个List
,但这并不意味着您可以为其分配一个List
。
考虑:
public interface MyList extends List<String> {
void foo();
}
MyList l = new ArrayList<String>();
l.foo();
显然ArrayList
没有foo()
方法。
关于Java接口(interface) "Alias",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1355617/