Что такое ковариантный тип возврата?

Все операторы в функции выполняются в одной транзакции, и никакой плагин не может это изменить.

Вы можете использовать процедуры начиная с v11, но вам все равно придется явно управлять транзакциями.

Я подозреваю, что лучше всего было бы запускать ваши функции на клиенте базы данных, где вы выполняете автоматическую фиксацию автоматически, а не как функцию в базе данных.

96
задан Ram 9 July 2016 в 10:22
поделиться

2 ответа

Ковариантный возврат означает, что при переопределении метода типом возвращаемого значения метода переопределения может быть подтип типа возвращаемого значения замещенного метода.

Чтобы прояснить это на примере, общим случаем является Object.clone () - объявлен как возвращающий тип Object . Вы можете переопределить это в своем собственном классе следующим образом:

public class MyFoo
{

   ...

   // Note covariant return here, method does not just return Object
   public MyFoo clone()
   {
       // Implementation
   }
}

Преимущество здесь заключается в том, что любой метод, содержащий явную ссылку на объект MyFoo, сможет вызвать clone () и знать (без преобразования), что возвращаемое значение является экземпляром MyFoo . Без ковариантных типов возврата необходимо было бы объявить переопределенный метод в MyFoo для возврата Object , и поэтому вызывающий код должен был бы явно понижать результат вызова метода (даже если бы обе стороны «знали», что он может только когда-либо быть экземпляром MyFoo).

Обратите внимание, что в clone () нет ничего особенного и что любой переопределенный метод может иметь ковариантный возврат - я использовал его в качестве примера здесь, поскольку это стандартный метод где это часто бывает полезно.

133
ответ дан 24 November 2019 в 05:38
поделиться

Для добавления к вышеупомянутым ответам переопределение возможно среди ковариантных типов возврата с ограничением, что тип возврата метода переопределения (метод подклассов) должен быть подклассом типа возврата переопределенного метода (метод суперкласса). Это допустимо от Java 5 вперед.

1
ответ дан 24 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: