-4

我对 JAVA 完全陌生。我正在用 JAVA 编写一个包装库,以使某些功能以类似基本的语言可用。

当我注意到一些代码没有在 JAVA 库中执行时,我在某个时候得到了库存,尽管编译器没有抱怨(使用 Eclipse)。我最终通过替换代码解决了它,如下所示:

public void VideoQuality(int vQuality) //did not work 

进入

public boolean VideoQuality(int vQuality) //works

以下是完整的代码片段:

 public void VideoQuality(int vQuality) //did not work
        {if (vQuality==16) {
            vidQuality=16;
            }
            else if (vQuality==-16)  {
                vidQuality=-16;
            }
            else if (vQuality==0)  {
                vidQuality=0;
            }
            else
                vidQuality=-16;
        vitamioExt.setVideoQuality(vidQuality);
         }  

public boolean VideoQuality(int vQuality) //works
        {if (vQuality==16) {
            vidQuality=16;
            }
            else if (vQuality==-16)  {
                vidQuality=-16;
            }
            else if (vQuality==0)  {
                vidQuality=0;
            }
            else
                vidQuality=-16;
        vitamioExt.setVideoQuality(vidQuality);
        return true;
          }  

我认为void对应于 Visual Basic 中的 sub 而boolean对应于函数。

但是我发现以下代码使用void工作很奇怪

public void setVolume(float leftVolume,float rightVolume)
      {
          vitamioExt.setVolume(leftVolume, rightVolume);
      }

我肯定遗漏了一些非常明显的东西,但我不明白为什么void -code 在boolean -code 工作时不起作用。

也许这取决于我如何调用代码?

任何人都可以点亮一些灯?

编辑:为了澄清什么不起作用,我的意思是代码:

vitamioExt.setVideoQuality(vidQuality);

没有在 void-snippet 中执行。

EDIT2: vidQuality 在代码的不同部分中声明。我刚刚发布了这些片段,因为问题出在这些片段上,并且变量都在起作用。

EDIT3:最后,我想我一定是错误地调用了 void-snippet,尽管编译器没有编译。在任何一种情况下,两个片段都应该执行,尽管 void-snippet 当然是正确的,因为我不期望返回值。

4

2 回答 2

10

之间的唯一区别

public void VideoQuality(int vQuality)

public boolean VideoQuality(int vQuality)

是前者不返回值,而后者则返回(特别是一个boolean值)。这就是差异的全部程度。

这意味着,例如,void版本为VideoQuality

boolean x = VideoQuality(10); // Will not compile
VideoQuality(10);             // Will compile

...因为您不能将void函数的结果分配给变量。

如果您使用以下boolean版本VideoQuality

boolean x = VideoQuality(10); // Will compile
VideoQuality(10);             // Will compile

...因为尽管您可以boolean分配返回变量的函数的结果boolean,但您不必这样。如果你愿意,你可以忽略返回值。(通常这不是好的做法,但有时没关系。)

我认为 void 对应于 Visual Basic 中的 sub 而 boolean 对应于函数。

粗略地说,是的。void表示函数没有返回值,就像Sub在 VB 中一样。其他任何东西(boolean, int, Foo, 不管)都表明 A)该函数有一个返回值,并且 B)它是给定的类型。这就像Function在 VB 中一样。

于 2012-07-06T22:16:53.327 回答
1

函数是用类型声明的,很像常规变量,但函数声明的类型称为它的返回类型,它表示“这个函数在调用时将返回一个布尔值”。例如:

boolean alive = true;
boolean isDogAlive() {
    return alive;
}

如果这个函数被调用,它会返回 true,所以你可以说

if (! isDogAlive()) { // if it returns false
    System.out.println("Oh no!");
} else {
    System.out.println("Yay!");
}

如果函数不返回任何内容,则函数被声明为void 。除非您确实需要获取真/假值,否则您不需要为方法提供布尔返回类型。Void 应该适合您的情况。

于 2012-07-06T22:25:39.430 回答