Java接口(interface) "Alias"

标签 java interface types

考虑以下两个 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/

相关文章:

java - 如何在 Java 中使用 CSV Reader API 返回数据类型

java - 关于接口(interface)中合约之外使用的方法的澄清

java - 如何在android中创建动态水平表格行?

java - 如何从Firebase Firestore实时更新文档中获取修改后的字段或数据?

database - 在 APEX 5.1 的交互式报告中选中相关复选框时如何启用选择列表

c# - 在 IValueConverter 的 Type targetType 参数中输入什么

typescript - 如何访问可为空的 typescript 嵌套类型

arrays - 无法插入 : ERROR: array value must start with "{" or dimension information

java - 使用 PermGen 空间或 roll-my-own intern 方法?

java - 如何在 Java 中使用泛型来使用两个接口(interface)作为参数?