我想创建一个if语句的方法。如果条件为真,则返回一个字符串,否则返回一个布尔值。
像这样(不编译):
public String getName() {
String name = "Name";
if (/* some condition */) {
return this.name;
}
return false;
}
这样的事情可能吗?
答案 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;
}
}