在Java中设置原语而不获取警告

在Java中设置原语而不获取警告,java,Java,我有一个Java方法。为了成为一个公共论坛,我要说我的方法叫做foo Bar foo(Boolean flag) { flag = true; return new Bar(); } 我通过设置标志得到警告。不幸的是,我没有找到一种方法来压制这种警告。有没有“正确”的方法?现在我知道有些人会说,不要使用out参数。相信我,当我说我有很好的理由这样做。如果没有办法绕过警告而不做些疯狂的事,我想那没关系。我只是不喜欢签入带有警告的代码。您会收到警告,因为您的作业没有做任何有用的事情。你

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

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

我通过设置标志得到警告。不幸的是,我没有找到一种方法来压制这种警告。有没有“正确”的方法?现在我知道有些人会说,不要使用out参数。相信我,当我说我有很好的理由这样做。如果没有办法绕过警告而不做些疯狂的事,我想那没关系。我只是不喜欢签入带有警告的代码。

您会收到警告,因为您的作业没有做任何有用的事情。你不应该签入这段代码,因为它没有做你认为它做的事情。例如:

Boolean x = false;
Bar bar = foo(x);
System.out.println(x); // Still false
您的代码正在设置
标志
参数的值,该参数不会更改传入的值。Java严格使用传递值,包括在传递引用时(在这里就是这样做的)

如果
Boolean
是可变的,您可以编写:

// Not actually valid
flag.setValue(true);
并更改第一段代码中引用的
x
对象的内容,但Java中的所有包装器类型都是不可变的


现在还不清楚您的更高级别的目的是什么,但基本上,您给出的代码无法实现这一目标-因此请注意警告,并改变您的方法。

您可以查看Java注释:

有一个“SuppressWarning”注释可以帮助您


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

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

this.setFlag(true)


在其他细节方面,乔恩给出了很好的回答。

布尔值
不是原语<代码>布尔值是。请在您的问题中包含警告消息,以便其他人可以确保他们对正确的问题发表了评论。您的示例被抽象到不清楚您在做什么的程度。如果你真的只想知道如何抑制警告,用谷歌搜索警告文本可能会得到答案,如果有的话。如果您对解决警告情况感兴趣,则需要提供更能代表您的情况的代码。关于“现在我知道有人会说不要使用out参数”,Java中没有out参数这样的东西。你的旗帜不会为外面的世界而改变!方法之外的任何代码都不会知道参数标志的局部值现在为真。您能否详细说明“这样做的好理由”?这个代码的目的是什么+1阅读OP的思想-可能是正确的,给出了“out参数”的东西。这就是我害怕的。但我想我还是会抛出这个问题,看看是否有人知道我不知道的事情。@Jason:你认为改变参数值有什么效果吗?如果你知道,那么人们确实知道一些你不知道的事情。如果你已经知道了,我很想听到你的“这样做的好理由”;但事后看来,我发现确实如此。我担心的是,这一警告是无法避免的。结果比我想象的更糟。我是C#出身。因此,虽然我不太喜欢out参数,但在我正在使用的场景中,out参数应该是合适的。@Jason:在C中,我可能会将
Bar
作为out参数,并返回一个
bool
…是的,我同意这句话。在代码中乱扔虚假警告只会让您看不到真正有用的警告实际上从来没有-从来没有-有任何好的理由来禁止“写入从未读取的局部变量”警告(无论官方警告名称是什么)。毕竟它是一个bug(或者死代码,选择一个)
this.flag = true;