【问题标题】:Setting an Instance's Variable While Returning it在返回时设置实例的变量
【发布时间】:2019-08-05 11:45:52
【问题描述】:

只是对想到的一些小事感到好奇,但我无法通过搜索找到答案。是否可以使用 return 关键字返回一个实例,并在该实例的同一行中设置一个变量?

例如,我尝试做:

public Person randomPersonHeight(Person person){
     Random r = new Random();
     return person.height = 5+(r.nextFloat()*1.5);//Imperial Measurements baby!
}

我想设置人的高度并一口气返回人。但没有奏效也就不足为奇了。当然,我可以在单行中完成并不重要。而且,只是不会代表任何更少的东西!.. 但是,我发现自己想知道是否有任何表达或不同的格式可以使它成为可能。

【问题讨论】:

  • 没有。没有办法将该表达式写在一行上。使用两个。
  • 好吧,如果你的Person 有一个需要高度的构造函数,你可以return new Person(newHeight)。但前提是你有合适的构造函数(并且除了高度你不需要其他任何东西)。
  • 有可能:15.25. Conditional Operator ? : - 如果你真的想要一种丑陋的方式来做这件事(不是很现实/严重),请参阅我对 Henning's answer 的评论
  • 是的,我认为没有办法以传统方式做到这一点,因为这对我来说没有逻辑意义,但我很高兴我可以快速询问每个人是否还有其他人知道一些我不知道的小众魔法表达。干杯!

标签: java


【解决方案1】:

你不能那样做。

setter 方法 有一个常见的用法,它返回对象本身,以使这样的事情成为可能。但是你不能只使用语言的本地操作符。


当然,如果你写的话

 person.height = 5+(r.nextFloat()*1.5); return person;

但是,如果您让代码自动格式化程序靠近它,它可能无法生存......

【讨论】:

  • "你不能只使用语言的本地操作符" - 不要低估开发者的想象力......return (person.height = 5+(r.nextFloat()*1.5)) > 0 ? person : null;(以及制作不可读代码的能力[ :-) )
  • 15.25. Conditional Operator ? : 是原生运算符,Optional 更像是一个类......而且肯定不是 Person
  • @CarlosHeuberger 这段代码的创意让我发笑。
【解决方案2】:

其他答案谈到了 setter,但我认为他们将您的问题误解为有关编码约定(您应该做什么),而如果我理解正确,您询问了 Java 语言本身(你可以做什么)。

返回一个值并同时设置,这对Java语言来说是没有问题的。

示例

class Test
{
    int sum;

    public int sum(int a, int b)
    {
        return (sum=a+b);
    }

    public static void main(String[] args)
    {
    System.out.println(new Test().sum(1,2));
    }

} 

【讨论】:

  • “返回一个值并同时设置它对 Java 语言来说没有问题”,heavy 需要注意的是返回类型必须等于您正在设置的东西.他不是。他正在设置一个替身,并希望返回一个人。
  • @Michael:你说得对,我自己误解了这个问题。
猜你喜欢
  • 2010-10-24
  • 1970-01-01
  • 2021-01-07
  • 2019-02-01
  • 1970-01-01
  • 2012-07-14
  • 2015-05-21
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多