Java 有条件地加上“;“可选项目”;使用数组初始化语法?
我想知道我是否可以在这里轻松地得到一个if语句:Java 有条件地加上“;“可选项目”;使用数组初始化语法?,java,arrays,if-statement,syntax,array-initialization,Java,Arrays,If Statement,Syntax,Array Initialization,我想知道我是否可以在这里轻松地得到一个if语句: public Object[] tableItemFromVisit(Visit visit, boolean editable) { return new Object[] { visit.getIdVisit(), visit.getProfession().getProfessionName(), visit.getSpiProfessional().getFu
public Object[] tableItemFromVisit(Visit visit, boolean editable) {
return new Object[] {
visit.getIdVisit(),
visit.getProfession().getProfessionName(),
visit.getSpiProfessional().getFullName(),
RegularFunctions.getTimeFormat().format(visit.getVisitDate()),
RegularFunctions.toNormalCapitalizedText(visit.getVisitState()
.toString()), visit.getReason(),
if (editable) { "Edit" },
};
}
这个结构怎么叫?阵列规范还是什么?
无论如何,如果变量“editable”为true,它必须有一个“Edit”字符串,如果为false,它不需要任何东西。。。
显然,我不想写两个彼此太相似的返回语句…如果我理解正确,您希望返回的
对象[]
具有一个额外的元素,如果editable
为true
这在java中是不可能的
如果可以在那里使用
null
,则可以使用可编辑?“编辑”:null
代替if(editable){“Edit”}
,但您可能已经知道了。不可能使用提供的构造传递额外参数。您可以通过以下方式之一修改代码:
尝试:
或
看起来您希望使用如下条件运算符:
可编辑?“编辑”:“
(如果您希望这样做,则为null)
显然,它有额外的元素。将上述数组构造为
数组列表
,并将其返回数组
这个想法的实质是做这样的事情
ArrayList<Object> ret = new ArrayList<Object>(new Object[] {
visit.getIdVisit(),
visit.getProfession().getProfessionName(),
visit.getSpiProfessional().getFullName(),
RegularFunctions.getTimeFormat().format(visit.getVisitDate()),
RegularFunctions.toNormalCapitalizedText(visit.getVisitState()
.toString()), visit.getReason()
// don't add Edit item at all yet
})
if(editable)
ret.add("Edit");
return ret.toArray();
ArrayList ret=新的ArrayList(新对象[]{
visit.getIdVisit(),
访问.getProfessionName().getProfessionName(),
访问.getSpiProfessional().getFullName(),
RegularFunctions.getTimeFormat().format(visit.getVisitDate()),
RegularFunctions.toNormalCapitalizedText(visit.getVisitState())
.toString()),访问.getReason()
//根本不添加编辑项
})
如果(可编辑)
重新添加(“编辑”);
返回返回返回到阵列();
我不确定这种初始化是否有效,如果不是
数组的话。也可以使用toList
,或者一个一个地添加。假设您正在尝试使一个对象包含有关访问的数据。为什么不为if(editable){“Edit”}
创建一个函数并利用封装呢
private String getEditFeedback(boolean editable){
if(editable){
return "Edit";
} else {
return //something
}
}
然后在你的代码里面
public Object[] tableItemFromVisit(Visit visit, boolean editable) {
return new Object[] {
visit.getIdVisit(),
visit.getProfession().getProfessionName(),
visit.getSpiProfessional().getFullName(),
RegularFunctions.getTimeFormat().format(visit.getVisitDate()),
RegularFunctions.toNormalCapitalizedText(visit.getVisitState()
.toString()), visit.getReason(),
getEditFeedback(editable),
};
}
因此,唯一的方法是在前面写if,然后写返回语句,这些语句在最后一个元素中是否存在差异?不!它没有相同的效果,它在数组中有一个额外的元素,如果条件不成立,它的值为
”
或null
。但随后将创建一个额外的成员,它将是一个空字符串,我不需要任何对象吗?还是我误解了?@ArturasM:是否要根据editable
状态添加额外的参数?如果是,在这个结构中是不可能的。哇,对否决票来说很容易,这个问题有点模糊——不需要任何东西可以被认为是空的ok@Azodious没错,如果是假的,我什么都不要。我可以用什么方法来达到这个目的吗?不!它没有相同的效果,如果条件不成立,它在数组中有一个额外的元素,其值为”
或null
。不,如果条件为false,则它更像是有一个元素或根本没有一个元素,如果
是一个语句,并且不能用作表达式<代码>?:是一个表达式:当然,所有表达式都必须计算为一个值。标题应该改进,但我不知道如何改进。@Misalevariable是的,我知道,对不起,我自己想不出一个好标题…@Misalevariable:我不同意。它清晰、简单、易读。除非有很好的理由不使用它(即性能在本节中至关重要),否则没有理由不使用它。@Miseraveable在其他一些语言中,是的(如Scala、C#、Ruby等:D)。然而,Java的普通集合语法/支持在此显示。。当然,我会说,为什么不给每个人一份清单呢?他自己的:)我觉得不好看,这就是为什么我写了《没有好的选择》的原因。你能展示一下它会是什么样子吗,因为我不知道你说的是什么意思?我不确定是否可以返回一个列表,因为示例中使用了新对象[],所以我在Vaadin Frameworkooks中将其用于表项。非常好,我现在正在尝试,但类型参数似乎有问题或其他问题:ArrayList ret=new ArrayList(它说不能为ArrayList和“”运算符推断类型参数,源代码级别低于1.7时不允许使用“”(我的项目使用1.6),这与三元运算符问题非常类似-如果条件不成立,它将在数组中有一个额外的元素。
ArrayList<Object> ret = new ArrayList<Object>(new Object[] {
visit.getIdVisit(),
visit.getProfession().getProfessionName(),
visit.getSpiProfessional().getFullName(),
RegularFunctions.getTimeFormat().format(visit.getVisitDate()),
RegularFunctions.toNormalCapitalizedText(visit.getVisitState()
.toString()), visit.getReason()
// don't add Edit item at all yet
})
if(editable)
ret.add("Edit");
return ret.toArray();
private String getEditFeedback(boolean editable){
if(editable){
return "Edit";
} else {
return //something
}
}
public Object[] tableItemFromVisit(Visit visit, boolean editable) {
return new Object[] {
visit.getIdVisit(),
visit.getProfession().getProfessionName(),
visit.getSpiProfessional().getFullName(),
RegularFunctions.getTimeFormat().format(visit.getVisitDate()),
RegularFunctions.toNormalCapitalizedText(visit.getVisitState()
.toString()), visit.getReason(),
getEditFeedback(editable),
};
}