设置原语而不在Java中收到警告

Jas*_*son 0 java

我有一个Java方法.为了成为一个公共论坛,我要说我的方法叫做foo

Bar foo(Boolean flag)
{
   flag = true;
   return new Bar();
}
Run Code Online (Sandbox Code Playgroud)

我通过设置标志得到警告.不幸的是,我还没有办法抑制这种警告.这样做有"正确"的方法吗?现在我知道有些人会说不要使用out参数.相信我,当我说我有充分的理由这样做.如果在没有做出疯狂的事情的情况下无法绕过警告,我想这没关系.我只是不喜欢用警告检查代码.

Jon*_*eet 10

您收到警告是因为您的任务没有任何用处.您不应该检查此代码,因为它不会执行您认为的操作.例如:

Boolean x = false;
Bar bar = foo(x);
System.out.println(x); // Still false
Run Code Online (Sandbox Code Playgroud)

你的代码设置的值flag参数,它不会改变任何有关它在传递的值.Java的严格使用传递的价值,当它通过引用(它在这里做什么),包括.

如果Boolean是可变的你可以写:

// Not actually valid
flag.setValue(true);
Run Code Online (Sandbox Code Playgroud)

并更改x第一段代码中引用的对象的内容- 但Java中的所有包装器类型都是不可变的.

现在还不是很清楚你的更高层次的目的是什么,但基本上它不会由你给出的代码完成 - 所以注意警告,并改变你的方法.

  • @Jason:您是否认为更改参数值有任何影响?如果你这样做了,那么伙计*确实*知道你没有做过的事情.如果你已经知道这一点,我很想听听你"这样做的好理由". (3认同)