En frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java de Android está la cláusula:

    //if device type is tablet force enable NavigationBar and forbid NavigationBar move
    String deviceType = SystemProperties.get("sys.device.type");
    if (! "".equals(deviceType) && deviceType.equals("tablet")) {
        mNavigationBarCanMove = false;
        mHasNavigationBar = true;
    }

¿Es ! "".equals(deviceType) && completamente redundante, o tiene algún sentido?

2
fadedbee 28 sep. 2017 a las 18:18

2 respuestas

La mejor respuesta

La declaración if (! "".equals(deviceType) && deviceType.equals("tablet")) es mala por varias razones:

  1. "".equals(deviceType) no tiene valor en este caso.
  2. deviceType.equals("tablet") es una forma descuidada de comparar una variable de cadena con una constante.
  3. El uso de ! puede resultar confuso (que tiene una mayor frecuencia:! O &&?) Para los programadores de software Java.

Reemplace la declaración con esto:

if ("tablet".equals(deviceType))

Esto es mejor porque no lanzará una NullPointerException cuando deviceType es nulo.

Nota: El uso sugerido de TextUtils también es redundante.

1
DwB 28 sep. 2017 a las 16:02

Sí, es redundante en este caso porque la segunda cláusula involucra a la primera (si deviceType no es nula), por lo que puede simplificar haciendo lo siguiente:

//Use constant string to perform comparison to avoid possible NPE
if("tablet".equals(deviceType)) {}
2
AlexTa 28 sep. 2017 a las 16:06