Как обнаружить, если мое приложение работает в виртуальной машине?

Java поддерживает * ковариантные типы возврата для переопределенных методов. Это означает, что переопределенный метод может иметь конкретный тип возврата more . То есть, если новый тип возвращаемого значения присваивается возвращаемому типу метода, который вы переопределяете, это разрешено.

Например:

class ShapeBuilder {
    ...
    public Shape build() {
    ....
}

class CircleBuilder extends ShapeBuilder{
    ...
    @Override
    public Circle build() {
    ....
}

Это указано в раздел 8.4.5 Спецификации языка Java :

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

Объявление метода d1 с типом возврата R1 является возвращаемым типом-заменяемым для другого метода d2 с возвратным типом R2, тогда и только тогда, когда выполняются следующие условия:

  • Если R1 недействителен, то R2 является недействительным.
  • Если R1 является примитивным типом, то R2 является идентичен R1.
  • Если R1 является ссылочным типом, то: R1 является либо подтипом R2, либо R1 может быть преобразован в подтип R2 путем непроверенного преобразования (п. 5.1.9) или R1 = | R2 |
blockquote>

(«| R2 |» относится к стиранию R2, как определено в §4.6 JLS .)

* До появления Java 5 у Java были типы возвращаемых инвариантных , что означало возвращаемый тип переопределения метода, необходимый для точного соответствия переопределяемого метода.

35
задан Jason 31 January 2009 в 16:01
поделиться

2 ответа

Согласно Виртуальный Парень ПК сообщение в блоге" Обнаружение виртуальные машины Microsoft ", можно использовать WMI для проверки производителя материнской платы. В PowerShell:

 (gwmi Win32_BaseBoard).Manufacturer -eq "Microsoft Corporation"
19
ответ дан Jay Bazuzi 23 September 2019 в 23:54
поделиться

Вот пример одного способа сделать это. Это только работает с Виртуальным ПК Microsoft и VMware, но это - запуск: http://www.codeproject.com/KB/system/VmDetect.aspx

12
ответ дан Arthur Chaparyan 23 September 2019 в 23:54
поделиться
Другие вопросы по тегам:

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