首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java和Diamond Problem的new(?)实例

Java和Diamond Problem的new(?)实例
EN

Stack Overflow用户
提问于 2019-05-27 02:24:56
回答 1查看 0关注 0票数 0

让我们说我有一个名为HasSize包含一个名为的方法的接口int[] manuallyComputedSizes()

现在让我们创建两个子接口称为AbstractTreeSequence,然后一个叫做类BST实现这两个AbstractTreeSequence。这是经典的钻石问题。

经典的Java解决方案是覆盖直接调用两个子接口之一的方法,如:

代码语言:javascript
复制
@Override
public int[] manuallyComputedSize() {
    return AbstractTree.super.manuallyComputedSize();
}

要么:

代码语言:javascript
复制
@Override
public int[] manuallyComputedSize() {
    return Super.super.manuallyComputedSize();
}

但是,如果我们需要不同的东西呢?

如果我们假设每个实现的类HasSize都有一个称为size表示存储数据量的字段,我们希望找到一种方法来检查该字段是否正确设置了怎么办?如果我们希望用户以所有可能的方式手动计算所述数据量,然后将其与存储的数据进行比较,该怎么办?

在这种情况下,我们需要以下内容:

代码语言:javascript
复制
public int[] manuallyComputedSize() {
    return ArrayUtility.merge(
            AbstractTree.super.manuallyComputedSize(), 
            Sequence.super.manuallyComputedSize());
}

我尝试了这个解决方案,并收到以下错误消息:

代码语言:javascript
复制
- Duplicate default methods named manuallyComputedBigSize with the parameters () and () are inherited from the types Sequence<T,NodeBST<T>> and AbstractTree<T,NodeBST<T>>

有人有解决方案吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-27 12:23:19

Java没有Diamond Problem。Diamond Problem只能出现在支持多重继承的语言中,其中相同的方法可以在具有公共接口或超类的两个超类中以不同方式实现。在Java中,层次结构树中将始终存在任何给定方法的一个具体实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档