Java 有条件地加上“;“可选项目”;使用数组初始化语法?

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

我想知道我是否可以在这里轻松地得到一个if语句:

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), 
                };
    }