Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
¿Por qué la cabeza de LinkedBlockingQueue no es privada?

Estoy leyendo el código de LinkedBlockingQueue (JDK8u) y encuentro que el campo principal de LinkedBlockingQueue no es privado, pero el último campo es privado. No encuentro ninguna operación en particular con head . Entonces, ¿por qué no establecer la cabeza en privado?

 /** * Head of linked list. * Invariant: head.item == null */ transient Node<E> head; /** * Tail of linked list. * Invariant: last.next == null */ private transient Node<E> last;
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Examiné el archivo LinkedBlockingQueue.java en el código fuente jdk7u y vi que ambos campos ( head , last ) se definen naturalmente como ocultos. Esta es una técnica comúnmente utilizada en lenguajes de programación basados en programación orientada a objetos para evitar el acceso directo del cliente a los campos. Las líneas de código relevantes están disponibles a continuación:

 /** * Head of linked list. * Invariant: head.item == null */ private transient Node<E> head; /** * Tail of linked list. * Invariant: last.next == null */ private transient Node<E> last;

En cuanto a su pregunta, es posible que encuentre diferentes usos cuando navega desde una fuente diferente. Sin embargo, usted siempre es responsable de cuestionar e investigar su confiabilidad. Recomiendo buscar más fuentes para obtener buenas prácticas de código.

over 4 years ago · Santiago Trujillo Denunciar

0

Primero algunos hechos.

  1. En Java 6, el campo head es private .
  2. En Java 17, el campo head es paquete privado... y tiene el comentario sobre invariantes.
  3. El cambio realmente ocurrió en Java 8.

Entonces, ¿por qué lo cambiaron?

Bueno, hasta ahora no he podido descifrarlo, pero las posibles razones pueden incluir:

  • Para que las subclases (en el mismo paquete) puedan acceder al campo, aunque no puedo ver ninguna de esas clases en la base de código publicada.
  • Para que sea más fácil probar la clase. (Esta no es una buena razón para hacer este cambio, y no puedo ver ninguna evidencia de que esta sea la razón).
  • Es una cosa de "estilo personal" relacionado con las clases internas, aunque no me convence. (¿Por qué solo hacerlo por la head ? ¿Por qué no también por la tail ?)
  • Ocurrió por accidente.

Después de pasar 20 minutos mirando la historia en Github, creo que probablemente fue un accidente. El cambio parece haber ocurrido en este compromiso ( https://github.com/openjdk/jdk8u/commit/6f31fa54ac050d781656d6e8ed18a40b55ef5c0d )... de acuerdo con "culpa de git". Pero cuando miro lo que hay en la confirmación, no puedo ver el cambio en absoluto, y mucho menos el propósito 1 . es desconcertante

Tal vez sea más claro en la historia de Mercurial 2 .

En cualquier caso, todo esto es un ejercicio de curiosidad. No importa por qué lo cambiaron, y no afecta ningún código de usuario que hayan hecho 3 .


1: la descripción del conjunto de cambios dice que solo se está sincronizando con un repositorio privado mantenido por el autor original/principal de las clases java.util.concurrent .
2 - Estamos buscando un espejo Git de solo lectura del repositorio definitivo de Mercurial. Es posible que algo se haya estropeado en la creación del espejo.
3 - ... modulo de interacción con Heisenbugs ya presentes en el código del usuario.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda