Patrzyłem na nowe interfejsy API wprowadzone w Androidzie 4.2 . Patrząc na UserManager
klasę natknąłem się na następującą metodę:
public boolean isUserAGoat()
Służy do określania, czy użytkownik wykonujący to połączenie podlega teleportacji.
Zwraca, czy użytkownik wykonujący to połączenie jest kozłem.
Jak i kiedy należy to wykorzystać?
java
android
usermanager
Ovidiu Latcu
źródło
źródło
Odpowiedzi:
Z ich źródła metoda była zwracana,
false
dopóki nie została zmieniona w API 21.Wygląda na to, że metoda ta nie ma dla nas rzeczywistego zastosowania jako programistów. Ktoś wcześniej stwierdził, że może to być easter egg .
W API 21 implementacja została zmieniona, aby sprawdzić, czy z pakietem jest zainstalowana aplikacja
com.coffeestainstudios.goatsimulator
Oto źródło i zmiana .
źródło
false
zawsze.Nie wiem, czy był to „oficjalny” przypadek użycia, ale poniższe powoduje wygenerowanie ostrzeżenia w Javie (które może dodatkowo powodować błędy kompilacji, jeśli zostaną zmieszane z
return
instrukcjami, prowadząc do nieosiągalnego kodu):Jest to jednak legalne:
Często więc piszę głupią metodę użyteczności dla najszybszego sposobu pozorowania bloku kodu, a następnie podczas debugowania znajduję wszystkie wywołania do niego, więc jeśli implementacja się nie zmieni, można tego użyć.
JLS podkreśla,
if (false)
że nie wyzwala „nieosiągalnego kodu” z tego konkretnego powodu, że spowodowałoby to przerwanie obsługi flag debugowania, tj. Zasadniczo ten przypadek użycia (h / t @auselen). (static final boolean DEBUG = false;
na przykład).Zamieniłem
while
naif
, tworząc bardziej niejasny przypadek użycia. Sądzę , że dzięki temu zachowaniu możesz udoskonalić swoje IDE, takie jak Eclipse, ale ta edycja jest za 4 lata i nie mam środowiska Eclipse do zabawy.źródło
else
isUserAGoat()
zwraca true, jeśli użytkownik ma zainstalowaną określoną aplikację. Powodzenia w diagnozowaniu, że gdy Twój kod nagle zaczyna dziwnie zachowywać się na „losowych” urządzeniach!To wydaje się być wewnętrznym żartem w Google. Jest również opisywany w menedżerze zadań Google Chrome. Nie ma to innego celu, jak niektórzy inżynierowie uważają za zabawne. Co jest celem samym w sobie, jeśli chcesz.
Goats Teleported
kolumnę.Istnieje nawet ogromny raport o błędach Chromium dotyczący zbyt wielu teleportowanych kóz .
Poniższy fragment kodu źródłowego Chromium został skradziony z komentarzy HN .
źródło
Uzupełniając odpowiedź @djechlin (przy okazji dobra odpowiedź!), To wywołanie funkcji może być również użyte jako fałszywy kod do utrzymania punktu przerwania w IDE, gdy chcesz zatrzymać się w określonej iteracji lub określonym wywołaniu rekurencyjnym, na przykład:
isUserAGoat()
może być użyty zamiast deklaracji zmiennej zastępczej, która będzie wyświetlana w IDE jako ostrzeżenie, aw szczególnym przypadku Eclipse zatka znak punktu przerwania, co utrudni jego włączenie / wyłączenie. Jeśli metoda jest używana jako konwencja, wszystkie wywołania mogą być później filtrowane przez jakiś skrypt (może w fazie zatwierdzania?).Faceci Google są intensywnymi użytkownikami Eclipse (dostarczają kilka swoich projektów jako wtyczki Eclipse: Android SDK, GAE itp.), Więc odpowiedź @djechlin i ta uzupełniająca odpowiedź mają sens (przynajmniej dla mnie).
źródło
;
? Mam na myśli, że kozy są wyraźnie lepsze, ale jest już na to łatwy sposóbW każdej wersji Androida jest śmieszna nazwana metoda / stała / cokolwiek.
Jedyne praktyczne zastosowanie, jakie kiedykolwiek widziałem, dotyczyło Konkursu We / Wy Last Google, w którym zapytano, co to jest dla konkretnej wersji, aby sprawdzić, czy uczestnicy czytają raport różnic API dla każdej wersji. Konkurs miał również problemy z programowaniem, ale generalnie pewne ciekawostki, które można było najpierw automatycznie ocenić, aby liczba zgłoszeń spadła do rozsądnych kwot, które byłyby łatwiejsze do sprawdzenia.
źródło
W dyscyplinie rozpoznawania mowy użytkownicy dzielą się na kozy i owce .
Na przykład tutaj na stronie 89 :
Być może planowane jest oznaczenie użytkowników Androida jako kozłów w przyszłości, aby móc skonfigurować silnik rozpoznawania mowy na potrzeby kóz. ;-)
źródło
Google bardzo lubi kozy i jaja wielkanocne na bazie kóz . Były nawet wcześniejsze posty na temat Przepełnienia stosu .
Jak wspomniano w poprzednich postach, istnieje on również w menedżerze zadań Chrome ( pierwszy raz pojawił się na wolności w 2009 roku ):
A potem w wersjach Chrome na Windowsa, Linuksa i Maca na początku 2010 roku ). Liczba „Teleportowanych kóz” jest w rzeczywistości losowa :
Inne odniesienia Google do kóz obejmują:
O ile wiem, najwcześniejsza korelacja kóz i Google należy do oryginalnego postu na blogu „Koszenie kóz”.
Możemy bezpiecznie założyć, że jest to tylko jajko wielkanocne i nie ma zastosowania w świecie rzeczywistym, z wyjątkiem powrotu
false
.źródło
Począwszy od API 21 (pierwszy zestaw Android 5.0 / Lollipop SDK) wykrywa, czy aplikacja Goat Simulator jest zainstalowana:
Powinno to wyjaśnić, że sugestia djechlin, aby użyć go jako bez ostrzeżenia,
if (false)
jest potencjalnie katastrofalną strategią. To, co poprzednio było zwracanefalse
dla każdego urządzenia, teraz zwraca pozornie losową wartość: jeśli zostało to zakopane wystarczająco głęboko w kodzie, ustalenie , skąd pochodzą nowe błędy, może zająć dużo czasu.Konkluzja: jeśli nie kontrolujesz implementacji metody i zdecydujesz się jej użyć do celów innych niż określone w dokumentacji API, zmierzasz do kłopotów.
źródło
if(false)
produkować? Chodź tutaj. Jeśli tak wygląda twój kod, to zmiana implementacji jest najmniejszym z twoich problemów.Istnieje podobne wywołanie,
isUserAMonkey()
które zwraca wartość true, jeśli używane jest narzędzie MonkeyRunner . Wyjaśnienie SDK jest tak samo ciekawe jak to.Oto źródło.
Spodziewam się, że zostało to dodane w oczekiwaniu na nowe narzędzie SDK o nazwie coś z kozą i faktycznie będzie funkcjonować w celu przetestowania na obecność tego narzędzia.
Zobacz także podobne pytanie, Dziwna funkcja w ActivityManager: isUserAMonkey. Co to znaczy, do czego służy? .
źródło
ActivityManager
to zgłosić, czy zostało wywołane przezmonkey
narzędzie do testowania warunków skrajnych interfejsu użytkownika, ale nigdy tego nie potwierdziłem.Śmieszne pisanki.
W wersji Chrome Ubuntu w Menedżerze zadań ( shift+ esc) prawym przyciskiem myszy możesz dodać kolumnę science fiction, która we włoskiej wersji to „Capre Teletrasportate” (Teleportowane kozy).
Zabawna teoria na ten temat jest tutaj .
źródło
To nie jest żart
Najwyraźniej to tylko aplikacja do sprawdzania aplikacji Goat Simulator - autorstwa Coffee Stain Studios
Jeśli masz zainstalowany Goat Simulator, jesteś kozłem. Jeśli go nie masz, nie jesteś kozłem.
Wyobrażam sobie, że był to bardziej osobisty eksperyment jednego z programistów, który najprawdopodobniej znalazłby osoby o wspólnych zainteresowaniach.
źródło