Просто следите за тем, как я это сделал и почему:
Rule
из MonoBehaviour
, чтобы избежать отслеживания создания и удаления объектов gameObjects, которая оказалась болью. Invoke
не существует в родовых классах, я заменил его отражением, как описано здесь здесь Вы должны переопределить метод toString()
в вашем классе Box
:
class Box {
private final int height;
public Box(int h){
height = h;
}
@Override
public String toString(){
return Integer.toString(height);
}
}
Поскольку реализация по умолчанию наследуется классом Object
(базовый класс для каждого объекта в Java) , который выглядит следующим образом:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Обратите внимание, что это не печать адреса памяти, а шестнадцатеричное представление хеш-кода, возвращаемого
blockquote>hashcode()
-методом
Arrays.toString зацикливает каждый элемент в массиве, зацикливает и вызывает String.valueOf (element) для каждого элемента и добавляет их в результат StringBuilder.
String.valueOf (Box box) фактически вызывает box.toString (), поскольку класс Box не переопределяет метод toString (), тогда будет вызван родительский класс Object.toString () и className @ HexString (hashCode ( )) будут возвращены.
Вы можете либо переопределить метод toString () в Box, чтобы вернуть строковое значение высоты (будет напечатано [5, 3, 2]), либо высоту цикла и печати для каждого Box в массиве.