[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 إلى if (false) لا يؤدي إلى تشغيل "كود يتعذر الوصول إليه" لسبب محدد وهو أن هذا سيؤدي إلى قطع الدعم عن إشارات التصحيح ، أي أساسًا حالة الاستخدام هذه (h / tauselen). (القيمة static final boolean DEBUG = false; على سبيل المثال).

أنا محل في while ل ، if ، إنتاج حالة استخدام أكثر غموضا. أعتقد أنه يمكنك تحريك IDE الخاص بك ، مثل Eclipse ، مع هذا السلوك ، ولكن هذا التعديل هو 4 سنوات في المستقبل ، وليس لدي بيئة Eclipse للعب معها.

Question

كنت أبحث في واجهات برمجة التطبيقات الجديدة التي تم تقديمها في Android 4.2 . أثناء النظر إلى فئة UserManager صادفت الطريقة التالية:

 public boolean isUserAGoat()

تُستخدم لتحديد ما إذا كان المستخدم الذي يقوم بإجراء هذه المكالمة خاضعًا لعمليات النقل الأوتوماتيكي.

إرجاع ما إذا كان المستخدم الذي يجري هذه المكالمة هو عنزة.

كيف ومتى ينبغي أن تستخدم؟




استكمالا answer djechlin ( answer جيدة من جانب الطريق!) ، يمكن استخدام هذه الوظيفة أيضًا كرمز وهمي لاحتواء نقطة توقف في بيئة تطوير متكاملة (IDE) عندما تريد التوقف في بعض التكرار المحدد أو استدعاء تكراري معين ، على سبيل المثال:

يمكن استخدام isUserAGoat() بدلاً من تعريف متغير وهمية سيتم إظهاره في IDE كتحذير و ، في حالة Eclipse معينة ، سداد علامة نقطة الإيقاف ، مما يجعل من الصعب تمكين / تعطيله. إذا تم استخدام الطريقة كإتفاقية ، يمكن أن تتم تصفية جميع الدعوات في وقت لاحق من خلال بعض البرامج النصية (خلال مرحلة الالتزام ربما؟).

إن مستخدمي Google هم من مستخدمي Eclipse الثقيلة (يقدمون العديد من مشاريعهم كمكونات Eclipse الإضافية: Android SDK و GAE وغيرها) ، لذا فإن الإجابة علىdjechlin وهذه الإجابة التكميلية لها معنى كبير (على الأقل بالنسبة لي).




بدءًا من 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 لكل جهاز يقوم الآن بإرجاع قيمة عشوائية ظاهريًا: إذا تم دفن ذلك بشكل عميق بما فيه الكفاية في شفرتك ، فقد يستغرق الأمر وقتًا طويلاً لمعرفة مصدر أخطاءك الجديدة.

الخلاصة: إذا كنت لا تتحكم في تنفيذ طريقة ما وتقرر استخدامها لأغراض أخرى غير المذكورة في وثائق واجهة برمجة التطبيقات ، فأنت تتجه إلى المتاعب.




في أكثر جبال الكوكب نائية ، تكمن الأنواع المتقدمة من الماعز التي يبدو أنها قادرة على استخدام الهواتف حاليًا ، تمامًا مثل البشر!

لقطات متسربة: youtu.be/YJwZMUn7GdQ

يجب أن تكون Google قد اكتشفت ذلك وقررت تقديم الدعم لها ، في محاولة للبقاء في المقدمة للتقدم التكنولوجي.




تحظى 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 ينتمي إلى المشاركة الأصلية في مدونة "Mowing with goats" ، بقدر ما أستطيع أن أقول.

يمكننا أن نفترض بأمان أنه مجرد بيضة عيد الفصح وليس لها استخدام في العالم الحقيقي ، باستثناء العودة false .