0

我正在尝试理解 Webots(机器人模拟程序)中的示例代码。

我遇到过这段代码:

Servo rightShoulderPitch = getServo("RShoulderPitch");
rightShoulderPitch.setPosition(1.5);

我不明白第一行是什么肉。看起来“rightShoulderPitch”是Servo类的一个对象,但它没有像往常一样创建,以及“getServo”(我认为它是一种方法)如何出现在这里。

如果有帮助,此类的标题是:

public class FieldPlayer extends Robot {

参考手册中也有公司的描述,但我不明白它们的意思。可以在这里搜索getservo找到它。

--- RShoulderPitch:是机器人肩部的名称

我会非常感谢您的帮助。

谢谢

4

2 回答 2

6

这一行:

Servo rightShoulderPitch = getServo("RShoulderPitch");

...调用该getServo方法,传入字符串值“RShoulderPitch”。返回值作为rightShoulderPitch变量的初始值,类型为Servo。(请注意,这rightShoulderPitch 不是一个对象 - 它是一个变量。它有一个值,可以是 null 或对对象的引用。)

我们不知道返回类型getServo是什么,但它必须是可以隐式转换的东西Servo——所以要么是Servo它自己,要么是某个子类。

getServo可以:

  • 创建一个新对象,并返回对它的引用
  • 返回对现有对象的引用(例如从缓存中)
  • 返回空
  • 抛出异常

如果这些都没有帮助,请准确说明您不了解的内容。听起来您可能是 Java 新手——在这种情况下,不使用 Webbots API 学习“仅 Java”可能是一个好方法;仅当您对语言本身有信心时才学习 Webbots。

于 2012-05-05T11:59:27.750 回答
3

为了补充乔恩的出色回答,我将尝试用更笼统的术语向您解释。

当你想要一个三明治时,你有两种解决方案:

  • 自己准备三明治。这将相当于代码Sandwich s = new Sandwich()
  • 去小吃店问他们要三明治。这将相当于代码Sandwich s = snackBar.getSandwich("Ham & Cheese")

在后一种情况下,snackBar 对象的getSandwich()方法将使用您想要的三明治的名称(“Ham & Cheese”)来准备三明治并将其返回给您。因此,此方法可能会在内部调用 new Sandwich()。但它也可以委托给另一个对象并调用,例如:cook.prepareSandwich("Ham & Cheese"). 在这种情况下,将调用new Sandwich(). 或者,snackBar 对象也可以只获取一个预先准备好的三明治并存储在某个缓存中:fridge.getSandwich("Ham & Cheese")

于 2012-05-05T12:06:44.197 回答