[java] Android UserManager.isUserAGoat ()의 올바른 사용 사례?



Answers

이것이 "공식적인"유스 케이스인지는 모르지만 다음은 Java에서 경고를 생성합니다 (도달 문에 도달 할 return 컴파일 오류가 발생하여 도달 할 수없는 코드로 이어질 수 있음).

while (1 == 2) { // Note that "if" is treated differently
    System.out.println("Unreachable code");
}

그러나 이것은 합법적입니다.

while (isUserAGoat()) {
    System.out.println("Unreachable but determined at runtime, not at compile time");
}

그래서 나는 종종 자신이 코드 블록을 더미로 만드는 가장 빠른 방법을위한 바보 같은 유틸리티 메소드를 작성하고, 디버깅을 완료하면 모든 호출을 찾는다는 것을 알게된다. 따라서 구현이이를 변경하지 않는다면 사용할 수있다.

JLS 는 이것이 디버그 플래그에 대한 지원을 깨뜨리는 특별한 이유, 즉 기본적으로이 사용 사례 (h / t @auselen)에 대해 "연결할 수없는 코드"가 트리거되지 않는다고 지적합니다. ( static final boolean DEBUG = false; 를 들면).

if 에 대해서는 while 을 교체하여 좀 더 모호한 유스 케이스를 생성했습니다. Eclipse와 같이이 동작을 사용하여 IDE를 이동할 수 있다고 생각 하지만,이 편집은 향후 4 년입니다. Eclipse 환경을 사용할 필요가 없습니다.

Question

Android 4.2에 도입 된 새로운 API를보고있었습니다. UserManager 클래스를 살펴보면서 다음과 같은 메서드를 발견했습니다.

 public boolean isUserAGoat()

이 통화를하는 사용자가 순간 이동의 대상인지 여부를 결정하는 데 사용됩니다.

이 호출을 한 사용자가 염소인지 여부를 반환합니다.

언제 어떻게 사용해야합니까?




API 21 (첫 번째 Android 5.0 / Lollipop SDK) 에서 Goat Simulator 앱이 설치되어 있는지 여부를 감지합니다.

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * <p>As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can
 * now automatically identify goats using advanced goat recognition technology.</p>
 *
 * @return Returns true if the user making this call is a goat.
 */
public boolean isUserAGoat() {
    return mContext.getPackageManager()
            .isPackageAvailable("com.coffeestainstudios.goatsimulator");
}

이것은 djechlin 이 경고없이 경고 if (false) 로 사용하는 것이 잠재적으로 비참한 전략임을 분명히해야합니다. 이전에 모든 장치에 대해 false 를 반환 한 것은 이제 무작위로 보이는 값을 반환합니다. 코드에서 충분히 깊숙이 묻혀 있으면 새 버그가 어디에서 왔는지 파악하는 시간이 오래 걸릴 수 있습니다.

결론 : 메소드의 구현을 제어하지 않고 API 문서에 명시된 용도 이외의 용도로 사용하기로 결정했다면 문제가 될 수 있습니다.




행성의 가장 먼 산에서, 우리 인간과 마찬가지로 현재 휴대 전화를 사용할 수있는 고급 염소 종이 있습니다!

유출 된 영상 : youtu.be/YJwZMUn7GdQ

Google은 기술 진보의 최전선에 머물기 위해이를 발견하고 지원을 제공하기로 결정했습니다.




이런 식으로 @djechlin answer 보완하면 (자), 특정의 반복이나 특정의 재귀 호출을 정지하고 싶은 경우,이 함수 호출을 더미 코드로서 IDE에 보관 유지하는 일도 가능 합니다. 예를 들면 다음과 같습니다.

IDE에 경고로 표시되는 더미 변수 선언 대신 isUserAGoat() 사용할 수 있습니다. Eclipse에서는 특별한 경우 브레이크 포인트 표시가 막히므로이를 활성화 / 비활성화 할 수 없습니다. 이 방법을 규칙으로 사용하면 모든 호출을 나중에 일부 스크립트 (커밋 단계 중 어쩌면?)로 필터링 할 수 있습니다.

Google 사람들은 무거운 이클립스 사용자입니다 (그들은 Eclipse 플러그인으로 Android 플러그인, 즉 Android SDK, GAE 등 여러 프로젝트를 제공합니다). @djechlin 응답과이 보완 답변은 많은 의미가 있습니다.




Google은 염소 및 염소 기반 부활절 달걀에 대해 매우 좋아합니다. 거기에 이전에 스택 오버플로에 대한 게시물이 있습니다 .

이전 게시물에서 언급했듯이 Chrome 작업 관리자 ( 2009 년에 처음 등장 )에 존재합니다.

<message name="IDS_TASK_MANAGER_GOATS_TELEPORTED_COLUMN" desc="The goats teleported column">
    Goats Teleported
</message>

그리고 2010 년 초 Windows, Linux 및 Mac 버전의 Chrome에서 ). "염소 자리 이동"의 숫자는 사실 무작위입니다 .

 int TaskManagerModel::GetGoatsTeleported(int index) const {
     int seed = goat_salt_ * (index + 1);
     return (seed >> 16) & 255;
 }

염소에 대한 Google의 다른 언급은 다음과 같습니다.

염소와 Google의 가장 초기 상관 관계는 내가 알 수있는 한 원래의 "염소 깎기"블로그 게시물에 속합니다.

우리는 이것이 단지 부활절 달걀이라고 가정하고 false 을 반환하는 경우를 제외하고는 실제 사용을하지 않습니다.






Links