Объект создан и назначен без нового или объявления
Я пытаюсь понять пример кода в Webots (программа моделирования роботов).
Я столкнулся с этим кодом:
Servo rightShoulderPitch = getServo("RShoulderPitch");
rightShoulderPitch.setPosition(1.5);
Я не понимаю, что такое мясо по первой строчке. Похоже, что rightShoulderPitch является объектом класса Servo, но он не создается как обычно, и как getServo (я думаю, что это метод) приходит сюда.
Заголовок этого класса, если это помогает:
public class FieldPlayer extends Robot {
Также есть описание компании в справочном руководстве, но я не мог понять, что они имеют в виду. Здесь можно найти поиск по Гитеру.
--- RShoulderPitch: имя плеча робота
Я буду очень признателен за помощь.
Спасибо
2 ответа
В дополнение к превосходному ответу Джона я постараюсь объяснить вам более общие термины.
Когда вы хотите бутерброд, у вас есть два решения:
- приготовь бутерброд сам. Это будет эквивалент кода
Sandwich s = new Sandwich()
- идите в закусочную и попросите у них бутерброд. Это будет эквивалент кода
Sandwich s = snackBar.getSandwich("Ham & Cheese")
,
В последнем случае это объект закусочной getSandwich()
метод, который будет использовать название сэндвича, которое вы хотите ("Хэм и сыр"), чтобы приготовить сэндвич и вернуть его для вас. Таким образом, этот метод, вероятно, внутренне вызовет новый Sandwich()
, Но он также может делегировать другому объекту и вызывать, например: cook.prepareSandwich("Ham & Cheese")
, И в этом случае, это объект cook, который будет вызывать new Sandwich()
, Или объект snackBar также может просто получить бутерброд, который был подготовлен заранее и сохранен в некотором кеше: fridge.getSandwich("Ham & Cheese")
,
Эта строка:
Servo rightShoulderPitch = getServo("RShoulderPitch");
... вызывает getServo
метод, передавая строковое значение "RShoulderPitch". Возвращаемое значение используется в качестве начального значения rightShoulderPitch
переменная, которая имеет тип Servo
, (Обратите внимание, что rightShoulderPitch
это не объект - это переменная У него есть значение, которое будет либо нулевым, либо ссылкой на объект.)
Мы не можем сказать, что тип возврата getServo
есть, но это должно быть что-то, что неявно конвертируется в Servo
- так что либо Servo
сам или какой-то подкласс.
getServo
мог:
- Создайте новый объект и верните ссылку на него
- Возврат ссылки на существующий объект (например, из кеша)
- Вернуть ноль
- Бросить исключение
Если ничего из этого не помогло, уточните , что именно вы не понимаете. Похоже, вы новичок в Java - в этом случае, изучение "просто Java" без API Webots, вероятно, будет хорошим подходом; Учите Веботов только тогда, когда вы уверены в самом языке.