java - 如何验证特定的子类?

标签 java

我有一个基类:“工作项”。 Witch 由 3 个子类扩展:“Bug”、“Story”、“Feedback”。我从控制台 (String) 收到一条命令,列出所有类型的工作项,或一种特定类型(错误、故事、反馈)。 我有一个 WorkingItems 类型的集合,其中包含上述所有 3 个子类。如果当前对象是错误、故事或反馈(我不能使用 instanceof),我如何在循环集合时进行验证?

我不想将工作项的集合分成 3 个较小的错误、故事、反馈集合。

private String listAllWorkingItems(StringBuilder result) {
        WIMRepository.getWorkItemList().forEach(workItem -> result.append(workItem.toString()));
        return result.toString();
    }

    private String listAllStories(StringBuilder result) {
        WIMRepository.getWorkItemList(); //TODO
        return result.toString();
    }

    private String listAllBugs(StringBuilder result) {
        WIMRepository.getWorkItemList() //TODO
        return result.toString();
    }

    private String listAllFeedbacks(StringBuilder result) {
        WIMRepository.getWorkItemList() //TODO
        return result.toString();
    }

结果应该是这样的:

命令:显示全部 结果:“正在打印工作项集合”

命令:显示错误 结果:“仅打印工作项集合中的错误”

最佳答案

如果我错了请纠正我,但我认为拥有 3 个子类没有任何意义。

enum WorkingItemType {
    BUG, STORY, FEEDBACK;
}
class WorkingItem {
    private WorkingItemType type;

    public WorkingItemType getType() {
        return type;
    }
}

您没有说明为什么选择这种方式,我假设两个类(WorkingItemWorkingItemType)就足够了,这将使方法 listAllBugs 就这么简单

WIMRepository.getWorkItemList().stream()
        .filter(i -> WorkingItemType.BUG.equals(i.getType()))
        .forEach(i -> result.append(i.toString()));

此外,一个通用的方法就足够了。

WIMRepository.getWorkItemList().stream()
        .filter(i -> WorkingItemType.valueOf(input.toUpperCase()).equals(i.getType()))
        .forEach(i -> result.append(i.toString()));

instanceof 很少是一个好的选择,所以要求禁止它很好。

关于java - 如何验证特定的子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58353916/

相关文章:

java - 无法命名后台线程,Void 错误

java - 数组堆栈中的 NullPointerException

java - 如何将一个字符串分成 2-4 个长 block ?

Java:Eclipse 无法识别源文件夹

java - 某些 Android 设备中的背景颜色错误

java - 如何从java中的字符串中删除\"?

Java Util 可选代码到 Guava 可选映射和过滤器

java - 使用解决方案计数器进行数独回溯

java - 使用java中的Prepared Statement将用户IP地址插入MySql表

java - CSV 阅读器的危险 - Java