首页 > 解决方案 > 当返回值因条件而异时使用 Generic

问题描述

我想在不使用对象的情况下根据条件更改返回值。我如何使用泛型来做到这一点(如果可能的话)?

public Object getABC(SearchVO sVO) throws Exception {

    if(sVO.getNo() != null && sVO.getNo() != 0) {
        return service.one(sVO);   // return not list
    } else {
        return service.list(sVO);  // return list Type
    }
}

标签: javaspringgenericsreturn

解决方案


不可能,也不是一个好主意!

X 和“X 列表”不是同一类型,也无法使用泛型来表达。你看,泛型是一个编译时概念。泛型在运行时起的作用不大。因此,潜在的调用者甚至在编译时都不知道会返回什么。

更重要的是:这也不是好的设计实践。调用者应该知道返回了什么,否则您将负担该方法的每个调用者以区分各种可能的结果。

因此,真正的答案是:总是返回一个列表。在一种情况下,使用一个元素,否则使用更多元素!(或者,准确地说:在第二种情况下,你根本不知道有多少元素会回来,0、1、42,谁知道呢)。


推荐阅读