- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
嘿,你们这些人,
我问自己以下问题。这应该在 Java 中完成,但因为我不知道如何做到这一点,所以一个概念也会有所帮助:我有以下代码:
public abstract class A {
protected enum AType implements AInterface {
A_VALUE
}
public AInterface[] possibleRequests() {
AInterface types = AType.values();
return ArrayUtils.concat(types, possibleFurtherRequests());
}
public abstract AInterface[] possibleFurtherRequests();
}
public class B extends A {
protected enum BType implements BInterface {
B_VALUE
}
@Override
protected AInterface[] possibleFurtherRequests() {
//Here is my problem.
return BType.values();
}
}
public interface AInterface {
}
public interface BInterface extends AInterface {
}
我想做的是让这些 possibleRequest 方法具有无限的深度。它们只能通过 A
访问,我不知道也不应该知道 A
类型的对象属于哪个类。
我所说的无限深度的意思是,这个概念是通过C extends B
扩展的。我现在想要访问 A
、B
和 C
中的所有值。我如何强制执行,每当添加新子类时,程序员都被迫定义这些 AInterface 枚举(可选),以及如何强制他实现一个方法,然后在类层次结构中递归调用该方法(不是可选)。我不需要定义抽象方法或重写抽象方法的帮助。我想要做的不是覆盖现有的方法,也不向每个被调用的继承类添加抽象方法。
老实说,我不知道如何问这个问题,但我希望有人能理解我的意思。如果没有请发表评论。
最佳答案
方法的可见性很重要。您不能强制子类实现现在不是抽象的 possibleFurtherRequests,但这是它们需要的唯一方法。您也不能强制他们调用 super 方法。代码审查对此非常有效。
protected enum AType implements AInterface {
A_VALUE
}
protected enum BType implements BInterface {
B_VALUE
}
public abstract class A {
final public AInterface[] possibleRequests() {
return possibleFurtherRequests();
}
protected AInterface[] possibleFurtherRequests() {
return AType.values();
}
protected AInterface[] combine(AInterface[] some, AInterface[] more) {
AInterface[] combined = new AInterface[some.length + more.length];
System.arraycopy(some, 0, combined, 0, some.length);
System.arraycopy(more, 0, combined, some.length, more.length);
return combined;
}
}
public class B extends A {
@Override
protected AInterface[] possibleFurtherRequests() {
return combine(super.possibleFurtherRequests(), BType.values());
}
}
public interface AInterface {
}
public interface BInterface extends AInterface {
}
public void test() {
AInterface[] result = new B().possibleRequests();
Stream.of(result).forEach(System.out::println);
}
结果是
A_VALUE
B_VALUE
关于java - 通过类层次结构发生尾递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58559780/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!