Encontré este código fuente y quería asegurarme de que entendía por qué está escrito tal como está (o si debería estarlo):
boolean modified = false;
Set<String> possibleSites = settings.getPossibleSites();
Set<String> visibleSites = settings.getVisibleSites();
modified = someMysteriousMethod();
// Remove sites from visibleSites that are not in possibleSites
modified |= visibleSites.retainAll(possibleSites);
Mis preguntas sobre la ÚLTIMA declaración:
¿Por qué usar el operador bit a bit? RetenAll () devolverá un valor booleano de lo que sucedió.
¿Qué dice el operador / declaración? Si modificado es igual al valor de retorno, ¿deja solo el valor de modificado O si el valor de retorno es diferente, se modificará ese nuevo valor?
boolean retainAll(Collection<?> c)
devuelve true
sithe set changed as a result of the call
modified |= visibleSites.retainAll(possibleSites);
Entonces, la declaración anterior significa que si modified
es verdadero O retainAll
devuelve verdadero , entonces modified
se establece en verdadero , de lo contrario, el valor de modified
es falso
Se quería decir que si cualquiera modified
o retainAll()
es cierto, entonces modified
debe ser cierto. (Lo que tiene sentido dado el nombre. retainAll
Solo devuelve verdadero si Set
se cambió, y someMysteriousMethod
probablemente devuelve verdadero o falso dependiendo de si Set
se cambió el estado del .)
El código se descompone en:
modified = modified | visibleSites.retainAll(possibleSites);
Mira el siguiente código para ver los resultados de los |
booleanos:
System.out.println(true|true);
System.out.println(false|true);
System.out.println(true|false);
System.out.println(false|false);
Salida:
true
true
true
false
(Solo false|false
regresará false
, por lo que en el código, ambos modified
y retainAll
tendrán que devolver falso para modified
ser false
)
El valor de retorno del retainAll
método enSet
indica si la llamada cambió el conjunto.
Devoluciones:
true
si este conjunto cambió como resultado de la llamada
Aquí, true
indica que el conjunto fue modificado. El |=
operador compuesto realiza un "o" en los argumentos y lo asigna nuevamente al lado izquierdo. Con su caso, eso significa que si retainAll
regresa true
, luego true
vuelva a asignarlo modified
o déjelo modified
sin cambios.
Según el javadoc,
retainAll
se vuelve a ejecutartrue
si este conjunto cambió como resultado de la llamada
a |= b
es una operación que afecta el resultado de " a or b
" a a
. Por lo tanto, en su situación, la idea es afectar modified
el resultado de la declaración " visibleSites
se modificó antes OR
visibleSites
de retainAll
"
Quiero mostrar todos los clientes almacenados en archivos de texto, pero un cliente está almacenado en muchos archivos de texto y se muestra más de una vez. ¿Cómo eliminar duplicados de estos clientes? Yo he tratado ...
Estoy tratando de perfilar una JVM remota con VisualVM 1.4. Estoy ejecutando macOS High Sierra 10.13.6 localmente, con la siguiente versión de OpenJDK: java -version openjdk versión "1.8.0_181" OpenJDK Runtime ...
Estoy trabajando en la base de datos postgresql, necesito convertir un tipo de datos MYSQL Blob en un byte PostgreSQL usando código java solo ¿hay alguna forma de hacerlo?
Cuando intento analizar el encabezado de jwt como base64 a cadena, la salida es: {"alg": "RS256", "typ": "JWT", "kid": "1234" sin el último paréntesis, pero cuando decodifico el misma cadena base64 por ejemplo aquí: ...