- Los programadores experimentados de C ++ están muy acostumbrados a usar RAII (la adquisición de recursos es la inicialización). Java no tiene RAII, por lo que tiene que hacer la administración de recursos de alguna otra manera, probablemente usando try-with-resources.
- C ++ tiene plantillas, que son muy versátiles y se pueden usar para la metaprogramación de plantillas. Los argumentos de la plantilla de C ++ pueden ser tipos, o pueden ser valores constantes. Java no tiene plantillas; Tiene genéricos, que no son nada como plantillas. Los argumentos de tipo genérico tienen que ser de un tipo de objeto (los tipos primitivos deben estar encuadrados primero), y en particular, no se pueden usar los valores como un argumento genérico.
Peor aún, los genéricos de Java se basan en el borrado, lo que significa que los argumentos de tipo no están disponibles en tiempo de ejecución. Así, por ejemplo,
HashSet
yHashSet
se consideran la misma clase en tiempo de ejecución. - C ++ tiene herencia múltiple, que se puede usar para implementar mixins. Java solo tiene una herencia, y no admite mixins. Java 8 tiene métodos predeterminados, también conocidos como métodos de extensión, que se pueden usar para simular algunos tipos de mixins, pero tienen limitaciones.
En una nota relacionada, C ++ tiene herencia privada, que se puede usar para relaciones has-a (“composición”). Java solo tiene herencia pública, por lo que solo debe usar subclases para las relaciones is-a. Por lo tanto, las clases como
AbstractList
yAbstractCollection
son técnicamente una violación del principio de sustitución de Liskov, ya que realmente están destinadas a ser clases mixtas, si Java tenía mixins. - C ++ admite referencias de valores (“paso por referencia”). Java no lo hace, y todo es pasado por valor (las “referencias” de Java se parecen más a los punteros, excepto que no se puede hacer aritmética de punteros con ellos, y las matrices son sus propios tipos que no “decaen a los punteros”) . Tienes que crear una clase de boxeo si quieres simular el paso por referencia.
- C ++ tiene const. Java no lo hace. Si desea simular const en Java, generalmente debe crear una interfaz de solo lectura que no contenga métodos de mutación y que su clase la implemente.
- Java tiene su propio modelo de concurrencia, que usted querrá estudiar con cierto cuidado. Considero que Java Concurrency in Practice es un gran libro para esto.
Estoy seguro que recordaré más puntos para agregar más adelante. 🙂
- Antes de empezar a aprender programación, ¿qué debo aprender primero?
- ¿Cómo empezar a aprender STM32? Vale la pena
- Cómo obtener una experiencia práctica en R
- Con habilidades de dibujo realmente amateur, pero con una gran pasión por el arte, ¿con qué universidad / tutor debo inscribirme para aprender bellas artes?
- Para tener éxito en la escuela, ¿básicamente tienes que memorizar todo?