Java поддерживает * ковариантные типы возврата для переопределенных методов. Это означает, что переопределенный метод может иметь конкретный тип возврата more . То есть, если новый тип возвращаемого значения присваивается возвращаемому типу метода, который вы переопределяете, это разрешено.
Например:
class ShapeBuilder {
...
public Shape build() {
....
}
class CircleBuilder extends ShapeBuilder{
...
@Override
public Circle build() {
....
}
Это указано в раздел 8.4.5 Спецификации языка Java :
Типы возвращаемых данных могут варьироваться в зависимости от методов, которые переопределяют друг друга, если типы возвращаемого типа являются ссылочными типами. Понятие обратной подстановочной функции поддерживает ковариантные возвращения, то есть специализацию типа возврата к подтипу.
Объявление метода d1 с типом возврата R1 является возвращаемым типом-заменяемым для другого метода d2 с возвратным типом R2, тогда и только тогда, когда выполняются следующие условия:
blockquote>
- Если R1 недействителен, то R2 является недействительным.
- Если R1 является примитивным типом, то R2 является идентичен R1.
- Если R1 является ссылочным типом, то: R1 является либо подтипом R2, либо R1 может быть преобразован в подтип R2 путем непроверенного преобразования (п. 5.1.9) или R1 = | R2 |
(«| R2 |» относится к стиранию R2, как определено в §4.6 JLS .)
* До появления Java 5 у Java были типы возвращаемых инвариантных , что означало возвращаемый тип переопределения метода, необходимый для точного соответствия переопределяемого метода.
Согласно Виртуальный Парень ПК сообщение в блоге" Обнаружение виртуальные машины Microsoft ", можно использовать WMI для проверки производителя материнской платы. В PowerShell:
(gwmi Win32_BaseBoard).Manufacturer -eq "Microsoft Corporation"
Вот пример одного способа сделать это. Это только работает с Виртуальным ПК Microsoft и VMware, но это - запуск: http://www.codeproject.com/KB/system/VmDetect.aspx