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

时间:2011-09-19 20:07:19

标签: java

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

Bar foo(Boolean flag)
{
   flag = true;
   return new Bar();
}

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

3 个答案:

答案 0 :(得分:10)

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

Boolean x = false;
Bar bar = foo(x);
System.out.println(x); // Still false

您的代码正在设置flag参数的值,该参数不会更改任何有关传入的值.Java 严格使用传递-by-value,包括传递引用的时间(它在这里做)。

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

// Not actually valid
flag.setValue(true);

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

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

答案 1 :(得分:1)

您可以查看Java Annotations:

http://download.oracle.com/javase/tutorial/java/javaOO/annotations.html

“SuppressWarning”注释可以帮助您。

无论如何,一个好的程序不应该包含警告;)

答案 2 :(得分:1)

也许我错了,但是没有一个外部变量与“flag”相似吗? 在这种情况下,调整它是有意义的,并将其用作

this.setFlag(true)

this.flag = true;

在其他细节中,Jon给出了很好的答案。