Возврат нескольких значений из метода Java: почему нет n-кортежей объектов?

Почему не существует (стандартного, сертифицированного на Java) решения, являющегося частью самого языка Java, для возврата нескольких значений из метода Java, а не для разработчиков, которые должны использовать свои собственные средства, такие как карты, списки, пары и т.д.? Почему Java не поддерживает n-кортежные объекты?

Особенно для тривиальных частных методов, которые могут модифицировать два объекта вместе (в тандеме), и в этом случае типизированный объект как возвращаемый звучит избыточно.

-121--656767- Раскручивание области в конструкторах классов PHP Я изучаю классы PHP и исключения, и, исходя из фона C++, мне кажется странным следующее: когда конструктор производного класса создает исключение, кажется, что...

Я изучаю классы PHP и исключения, и, исходя из C++ фона, мне кажется странным следующее:

Когда конструктор производного класса создает исключение, оказывается, что деструктор базового класса не запускается автоматически:

class Base
{
  public function __construct() { print("Base const.\n"); }
  public function __destruct()  { print("Base destr.\n"); }
}

class Der extends Base
{
  public function __construct()
  {
    parent::__construct();
    $this->foo = new Foo;
    print("Der const.\n");
    throw new Exception("foo"); // #1
  }
  public function __destruct()  { print("Der destr.\n"); parent::__destruct(); }
  public $foo;                  // #2
}

class Foo
{
  public function __construct() { print("Foo const.\n"); }
  public function __destruct()  { print("Foo destr.\n"); }
}


try {
  $x = new Der;
} catch (Exception $e) {
}

Печать:

Base const.
Foo const.
Der const.
Foo destr.

С другой стороны, деструкторы объектов-членов выполняются правильно при наличии исключения в конструкторе (по адресу # 1 ). Теперь интересно: Как вы реализуете правильную раскручивание области в иерархии классов в PHP, чтобы подобъекты были правильно уничтожены в случае исключения?

Также кажется, что нет возможности запустить базовый деструктор после того, как все объекты-члены были уничтожены (в # 2 ). Если удалить строку # 1 , получится:

Base const.
Foo const.
Der const.
Der destr.
Base destr.
Foo destr.    // ouch!!

Как решить эту проблему?

Обновить: Я все еще открыт для дальнейших взносов. Если у кого-то есть хорошее обоснование, почему объектная система PHP никогда не требует правильной последовательности уничтожения, я выдам за это другую сумму (или просто за любой другой убедительно аргументированный ответ).

10
задан Kerrek SB 29 September 2011 в 15:30
поделиться