如何在java方法中返回不同的值类型?

时间:2017-01-19 11:12:04

标签: java return-type

我想创建一个if语句的方法。如果条件为真,则返回一个字符串,否则返回一个布尔值。

像这样(不编译):

public String getName() {
    String name = "Name";
    if (/* some condition */) {
        return this.name;
    }
    return false;
}

这样的事情可能吗?

4 个答案:

答案 0 :(得分:3)

不,你不能这样做,你定义一个函数返回类型并坚持下去。从这个意义上讲,Java被称为静态类型

你可以自己构建一个能够表示字符串和布尔值的类,但在你的情况下你可以简单地return null;用于false这个在Java中惯用的情况:

public String getName(){
    String name = "Name";
    if (/* some condition */){
      return this.name;
    }
    return null;
}

空字符串return "";是另一种可能性,可能更容易在呼叫站点上工作,但代价是它有点粗糙,但它将避免可怕的NullPointerException陷阱return null;可能会受到影响。

答案 1 :(得分:2)

不,但接下来最好的事情是返回Optional<String>

public Optional<String> getName() {
    String name = "Name";
    if (/* some condition */){
        return Optional.of(this.name);
    }
    return Optional.empty();
}

然后呼叫者可以使用:

Optional<String> result = thing.getName();
if (result.isEmpty())
    // the value was "false"

Optional,它只是一个值的一个薄包装或缺少值,在Java 8中引入,主要是为了更优雅地处理空值。

答案 2 :(得分:0)

你破坏了方法返回值的连贯性,

事件你可以返回一个OBJECT,这是一个臭臭的代码,将来会引起一些颈部...

如果满足条件则返回一个字符串,如果没有返回一个带有null的字符串

public String getName(){
    String name = "Name";
    if (conditionTrue){
      return this.name;
    }
    return null;
}

答案 3 :(得分:0)

首先要做的事情:欢迎来到Java的世界! :)

问题的答案:是的,你可以,但你不应该。您希望代码的解决方案是:

def calc_fronts_2(vecs):
    n = vecs.shape[0]
    # find the most dominating
    m = np.zeros(vecs.shape, dtype=bool)
    dominates = []
    for i, vec in enumerate(vecs):
        for x in xrange(n):
            m[x] = i != x
        mvecs = np.ma.masked_array(vecs, mask=~m)
        # print 'i=', i
        # print 'all better  \n', np.all(vec >= mvecs, axis=1)
        # print 'at least one\n', np.any(np.all(vec > vecs[m], axis=0))
        # print 'at least one\n', vec > mvecs
        # print 'at least one\n', np.any(vec > mvecs, axis=1)

        dom = np.where(np.all(vec >= mvecs, axis=1) & np.any(vec > mvecs, axis=1))
        dom = dom[0]
        dominates.append(dom.tolist())
    # print dominates

    dominated_by = [[j for j in xrange(n) if i in dominates[j]] for i in xrange(n)]

    print 'domin:\n', dominates
    print 'dom by\n', dominated_by
    ranks = np.empty(n, dtype=int)
    ranks.fill(-1)
    for r in xrange(n):
        remove = set()
        for i in xrange(n):
            if ranks[i] == -1 and len(dominated_by[i]) == 0:
                ranks[i] = r
                remove.add(i)
        for ranked in remove:
            for domby in dominated_by:
                if ranked in domby:
                    domby.remove(ranked)
        if np.all(ranks == -1):
            break
    return ranks

但是你应该只返回null而不是字符串,以避免使用空字符串作为false的返回。

public Object getName(){
    String name = "Name";
    if (/*true*/){
        return this.name;
    }else{
        return false;
    }
}