Этот класс генерирует циклы, когда вы запускаете их методы получения. Чтобы их сломать, нужно использовать аннотацию JsonBackReference
. Ваш mixin
может выглядеть так:
@JsonIgnoreProperties(ignoreUnknown = true)
abstract class DefaultMutableTreeNodeMixIn {
@JsonCreator
public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject) {
}
@JsonCreator
public DefaultMutableTreeNodeMixIn(@JsonProperty Object userObject, @JsonProperty boolean allowsChildren) {
}
@JsonProperty("childCount")
abstract int getChildCount();
@JsonProperty("depth")
abstract int getDepth();
@JsonProperty("firstChild")
@JsonBackReference
abstract TreeNode getFirstChild();
@JsonProperty("firstLeaf")
@JsonBackReference
abstract DefaultMutableTreeNode getFirstLeaf();
@JsonProperty("lastChild")
@JsonBackReference
abstract TreeNode getLastChild();
@JsonProperty("lastLeaf")
@JsonBackReference
abstract DefaultMutableTreeNode getLastLeaf();
@JsonProperty("leafCount")
abstract int getLeafCount();
@JsonProperty("level")
abstract int getLevel();
@JsonProperty("nextLeaf")
abstract DefaultMutableTreeNode getNextLeaf();
@JsonProperty("nextNode")
abstract DefaultMutableTreeNode getNextNode();
@JsonProperty("nextSibling")
abstract DefaultMutableTreeNode getNextSibling();
@JsonProperty("parent")
abstract TreeNode getParent();
@JsonProperty("path")
@JsonBackReference
abstract TreeNode[] getPath();
@JsonProperty("previousLeaf")
abstract DefaultMutableTreeNode getPreviousLeaf();
@JsonProperty("previousNode")
abstract DefaultMutableTreeNode getPreviousNode();
@JsonProperty("previousSibling")
abstract DefaultMutableTreeNode getPreviousSibling();
@JsonProperty("siblingCount")
abstract int getSiblingCount();
@JsonProperty("isLeaf")
abstract boolean isLeaf();
@JsonProperty("isRoot")
abstract boolean isRoot();
}
Но, вероятно, самый лучший и самый OOP
способ - это создать новый POJO
, представляющий ваше дерево, готовое к сериализации и без циклов.
Этот ключ реестра должен сказать Вам:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
Значение EnableLUA (DWORD)
1
включило / 0
, или пропавшие без вести отключили
, Но это предполагает, что Вы имеете права считать его.
Программно можно попытаться считать маркер пользователя и предположить - ли это администратор, работающий с включенным контролем учётных записей (см. здесь ). Не надежный, но это может работать.
проблемой здесь является больше, "почему необходимо знать" - она имеет влияние на ответ. Действительно, нет никакого API, потому что с точки зрения поведения ОС, что имеет значение, то, если пользователь является администратором или не - как они принимают решение защитить себя, поскольку администратор является их проблемой.
Это сообщение имеет пример кода в C#, чтобы протестировать, если контроль учётных записей идет и если текущему приложению дали поднятые права. Можно загрузить код и интерпретировать по мере необходимости. Также связанный существует образец, который показывает то же в C++
http://www.itwriting.com/blog/198-c-code-to-detect-uac-elevation-on-vista.html
, код в том сообщении только читает из реестра. Если контроль учётных записей включен, возможности - Вы, может не иметь прав считать это из реестра.
Можно сделать это исследовать значение DWORD EnableLUA в следующем ключе реестра:
HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/Policies/System
, Если значение 0 (или не существует) тогда контроль учётных записей ВЫКЛЮЧЕН. Если это присутствует и является ненулевым, то контроль учётных записей идет:
BOOL IsUacEnabled( )
{
LPCTSTR pszSubKey = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System");
LPCTSTR pszValue = _T("EnableLUA");
DWORD dwType = 0;
DWORD dwValue = 0;
DWORD dwValueSize = sizeof( DWORD );
if ( ERROR_SUCCESS != SHGetValue( HKEY_LOCAL_MACHINE, pszSubKey, pszValueOn,
&dwType, &dwValue, &dwValueSize) )
{
return FALSE;
}
return dwValue != 0;
}
Примечание, что, если пользователь изменил состояние контроля учётных записей, но еще не перезапустил компьютер, эта функция возвратит непоследовательный результат.
Проверьте на значение реестра в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
, который определяет значение EnableLUA, активен ли контроль учётных записей.
AFAIK, контроль учётных записей является apolicy, устанавливающим на локальном пользователе или группе. Таким образом, можно считать это свойство из.Net. Извините за не наличие большего количества деталей, но я надеюсь, что это помогает