gpt4 book ai didi

Java接口(interface) "Alias"

转载 作者:行者123 更新时间:2023-12-01 07:16:22 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com