gpt4 book ai didi

java - java 中向下转型的良好实践

转载 作者:行者123 更新时间:2023-12-01 12:54:00 26 4
gpt4 key购买 nike

我有一套操作。每个操作都是由 2 个步骤组成的序列。因此,我有一个执行这两个步骤的基类,所有操作都扩展该基类并提供这两个步骤的实际实现。例如。

class Base {
Step1 step1;
Step2 step2;

B execute() {
A a = step1.perform();
B b = step2.perform(a);
}

//Set methods...
}

这里的 Step1 和 Step2 是接口(interface),我们可以更改它们的实现来执行不同的操作。

我有以下问题:

  • step2 的每个实现都将 A 的实例作为输入,它也可以包含 A 的派生类型。所以我需要进行向下转换。在这种情况下可以进行向下转型吗?还是有更好的方法来实现这一目标?
  • 第 2 步的某些实现可能不会返回任何值。如果我们有一个仅用于类型层次结构的空类并且其他类扩展该类,可以吗?

最佳答案

问题 1

是的,没关系。每个扩展类 A 或实现接口(interface) A(无论 A 是什么)的类都将是“A 的实例”。因此,将其传递给需要 A 类型对象的方法是完全可以的。无需担心。这就是您应该如何使用接口(interface)和继承。同一父类(super class)有不同种类的“特化”。

问题 2

这是你的API设计的问题。如果您希望此方法可以返回 null,您可以这样做。但你应该很好地记录它!

Java 8 中的一个非常新的可能性是所谓的可选。如果某个方法可能返回 null 并且您希望强制程序员牢记这一点,则可以使用它们。这将是最干净的(也是推荐的)方式。您可以在 http://java.dzone.com/articles/optional-java-8-cheat-sheet 找到示例和说明。 。基本上你会说类Step2的方法perform将返回一个Optional而不是类型:

interface Setp2 {
public Optional<B> perform(A a);
}

// the optional will wrap the actual result which could be null
// since Java 8
Optional<B> b = step2.perform(a);

关于java - java 中向下转型的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24024023/

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