创建和分配一个对象时,不带 NEW OR 声明



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

我遇到了这段代码:

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

我不明白第一行的肉是什么。看起来"rightShoulderPitch"是伺服类的对象,但它不是像往常一样创建的,以及"getServo"(我认为它是一种方法(是如何来到这里的。

如果它有帮助,则此类的标头为:

public class FieldPlayer extends Robot {

它还在参考手册中有公司的描述,但我无法理解它们的含义。可以在这里找到搜索getservo

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

我会帮上大忙的。

谢谢

这一行:

Servo rightShoulderPitch = getServo("RShoulderPitch");

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

我们无法判断getServo的返回类型是什么,但它必须是隐式转换为Servo的东西 - 所以要么Servo本身,要么是某个子类。

getServo可以:

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

如果这些都无济于事,请准确澄清您不明白的内容。听起来您可能是 Java 的新手 - 在这种情况下,在没有 Webots API 的情况下学习"只是 Java"可能是一个好方法;只有当你对语言本身有信心时,才能学习Webots。

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

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

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

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

最新更新