[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)のサポートが中断されるという特定の理由で、「到達不能なコード」がトリガされif (false)指摘します。 ( static final boolean DEBUG = false;例えば)。

私はif whileに置き換え、より曖昧なユースケースを作り出しました。 私このような動作で、EclipseのようなあなたのIDEを飛び越えることができると信じていますが、この編集は4年後のものです。私はEclipse環境を持っていません。

Question

私はAndroid 4.2で導入された新しいAPIを見ていました。 UserManagerクラスを見て、私は次のメソッドを見つけました:

 public boolean isUserAGoat()

このコールを行っているユーザーがテレポートしているかどうかを判断するために使用されます。

この呼び出しを行ったユーザーがヤギかどうかを返します。

いつ、どのようにこれを使うべきですか?




Googleは、ヤギとヤギのイースターエッグを大いに好んでいます。 それについての以前のの投稿さえありまし

以前の記事でも触れたように、Chromeのタスクマネージャ内にも存在します( 2009年には最初に登場しました )。

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

そして、Windows、Linux、Mac版Chromeの2010年初頭 )。 「山羊の瞬間」の数は実際にはランダムです:

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

その他のヤギのGoogle参照は次のとおりです。

私が知る限り、ヤギとGoogleの最初の相関関係は元の「ヤギの刈り取り」ブログ記事に属しています。

私たちは、それが単なるイースターエッグであり、 falseを返すことを除いて、実際には使用していないと、安全に仮定できfalse




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ドキュメントに記載されている以外の目的でメソッドを使用することに決めた場合は、問題が発生する可能性があります。




この関数呼び出しは@djechlinのanswer補完するものですが、特定の反復や特定の再帰呼び出しを停止したい場合に、IDEにブレークポイントを保持するためのダミーコードとして使用できます。

IDEに警告として表示されるダミー変数宣言の代わりにisUserAGoat()を使用することができます。具体的には、Eclipseではブレークポイントマークが詰まって有効/無効にすることが難しくなります。 メソッドが規約として使用されている場合、すべての呼び出しは後で(コミットフェーズの間に?)いくつかのスクリプトによってフィルタリングされる可能性があります。

Googleのメンバーは大量のEclipseユーザーです(Eclipseプラグインとして、Android SDK、GAEなどのプロジェクトをいくつか提供しています)ので、@djechlinの回答とこの補足的な回答は、少なくとも私にとっては意味があります。




惑星の最も遠い山々には、私たちの人間のように、現在携帯電話を使用できるように見える高度な種のヤギがいます。

流出した映像: youtu.be/YJwZMUn7GdQ

技術進歩の最前線にとどまるために、Googleはこれを見つけて、サポートを提供することに決めた。




Related