Pregunta

Recientemente comencé a desarrollar aplicaciones para Blackberry.En consecuencia, tuve que saltar a Java-ME y aprender eso y sus herramientas asociadas.La sintaxis es sencilla, pero sigo teniendo problemas con varios errores y el entorno.

Por ejemplo, algo que me sorprendió y me hizo perder mucho tiempo es la ausencia de propiedades reales en un objeto de clase (algo que supuse que tenían todos los lenguajes de programación orientada a objetos).Hay muchas trampas.He estado en varios lugares donde comparan la sintaxis de Java con la de C#, pero no parece haber ningún sitio que indique cosas a tener en cuenta al pasar a Java.

El medio ambiente es un tema completamente diferente.El IDE de Blackberry es simplemente horrible.El aspecto me recuerda a Borland C++ para Windows 3.1: está así de anticuado.Algunos de los otros problemas incluyeron inteligencia irregular, depuración débil, etc.Blackberry tiene una versión beta del complemento Eclipse, pero sin soporte de depuración, es solo un editor con sofisticadas herramientas de refactorización.

Entonces, ¿algún consejo sobre cómo integrarse en Java-ME?

¿Fue útil?

Solución

Este chico aquí Tuvo que hacer la transición inversa.Entonces enumeró las 10 diferencias principales entre Java y C#.Tomaré sus temas y mostraré cómo se hace en Java:

Gotcha #10 - ¡Dame mi salida estándar!

Para imprimir en la salida estándar en Java:

System.out.println("Hello");

Gotcha #9 - Espacios de nombres == Libertad

En Java no tienes la libertad de los espacios de nombres.La estructura de carpetas de su clase debe coincidir con el nombre del paquete.Por ejemplo, una clase en el paquete org.prueba debe estar en la carpeta organización/prueba

Te tengo #8 - ¿Qué pasó con súper?

En Java para referirte a la superclase se usa la palabra reservada super en lugar de base

Gotcha #7 - Encadenamiento de constructores a un constructor base

No tienes esto en Java.Tienes que llamar al constructor tú mismo.

Gotcha #6 - Dagnabit, ¿cómo puedo subclasificar una clase existente?

Para subclasificar una clase en Java, haga esto:

public class A extends B {
}

eso significa clase A es una subclase de clase B.En C# sería class A : B

° 5: ¿Por qué las constantes no permanecen constantes?

Para definir una constante en Java use la palabra clave final en lugar de const

Te tengo #4 - ¿Dónde está? ArrayList, Vector o Hashtable?

Las estructuras de datos más utilizadas en Java son HashSet, ArrayList y HashMap.ellos implementan Set, List y Map.Por supuesto, hay muchos más.Leer más sobre colecciones aquí

Gotcha #3 - De accesores y mutadores (captadores y definidores)

No tienes la función de propiedades en Java.Tienes que declarar los métodos get y set por ti mismo.Por supuesto, la mayoría de los IDE pueden hacerlo automáticamente.

Te entendí #2: ¿¡No puedo anularlo!?

No tienes que declarar un método. virtual en Java.Todos los métodos, excepto los declarados. final - se puede anular en Java.

Y el número 1 te pilló...

En Java los tipos primitivos int, float, double, char y long no son ObjectEs como en C#.Todos ellos tienen una representación de objeto respectiva, como Integer, Float, Double, etc.

Eso es todo.No olvides ver el enlace original, hay una discusión más detallada.

Otros consejos

Java no es significativamente diferente de C#.A un nivel puramente sintáctico, he aquí algunos consejos que pueden ayudarte a pasar el día:

  1. En Java tienes dos familias de excepciones: java.lang.Exception y todo lo que de él se derive, y RuntimeException.Esto es significativo porque en Java las excepciones son comprobado;esto significa que para lanzar cualquier excepción que no sea de tiempo de ejecución también necesita agregar una throws anotación a la declaración de su método.En consecuencia, cualquier método que utilice el suyo tendrá que detectar esa excepción o declarar que él también arroja la misma excepción.Muchas excepciones se dan por sentado, como NullPointerException o IllegalArgumentException, de hecho derivan de RuntimeException y por lo tanto no es necesario declararlos.Las excepciones marcadas son un punto de discordia entre dos disciplinas, por lo que te recomiendo que las pruebes tú mismo y veas si te ayudan o te molestan.A nivel personal, creo que las excepciones comprobadas mejoran significativamente la factorización y la solidez del código.

  2. Aunque Java ha soportado el autoboxing durante bastante tiempo, todavía existen bastantes diferencias entre las implementaciones de C# y Java que debes tener en cuenta.Mientras que en C# puedes usar indistintamente int Como tipo de valor y tipo de referencia, en Java literalmente no son el mismo tipo:obtienes el tipo de valor primitivo int y el tipo de referencia de la biblioteca java.lang.Integer.Esto se manifiesta de dos maneras comunes:no puedes usar los tipos de valor como un parámetro de tipo genérico (por lo que usarás ArrayList<Integer> en lugar de ArrayList<int>), y los métodos de utilidad (como parse o toString) se implementan estáticamente en el tipo de referencia (por lo que no es int a; a.toString(); sino más bien int a; Integer.toString( a );).

  3. Java tiene dos tipos distintos de clases anidadas, C# solo tiene una.En Java una clase estática que no está declarada con el static modificador se llama clase interna, y tiene acceso implícito a la instancia de la clase adjunta.Este es un punto importante porque, a diferencia de C#, Java no tiene el concepto de delegados y las clases internas se utilizan muy a menudo para lograr el mismo resultado con relativamente poco dolor sintáctico.

  4. Los genéricos en Java se implementan de una manera radicalmente diferente a la de C#;Cuando se desarrollaron los genéricos para Java, se decidió que los cambios serían puramente sintácticos sin soporte de tiempo de ejecución, para conservar la compatibilidad con versiones anteriores de las máquinas virtuales más antiguas.Sin soporte directo de genéricos en el tiempo de ejecución, Java implementa genéricos utilizando una técnica llamada tipo de borrado.Hay bastantes desventajas del borrado de tipos sobre la implementación de genéricos en C#, pero el punto más importante a extraer de esto es que Los tipos genéricos parametrizados en Java no tienen diferentes tipos de tiempo de ejecución..En otras palabras, después de la compilación los tipos ArrayList<Integer> y ArrayList<String> son equivalente.Si trabaja mucho con genéricos, encontrará estas diferencias mucho antes de lo que cree.

En mi opinión, existen tres aspectos del lenguaje más difíciles de asimilar para un desarrollador de C#.Aparte de eso, están las herramientas de desarrollo y la biblioteca de clases.

  1. En Java, existe una correlación directa entre el paquete (espacio de nombres), el nombre de la clase y el nombre del archivo.Bajo un directorio raíz común, las clases com.example.SomeClass y org.apache.SomeOtherClass literalmente se encontrará en com/example/SomeClass.class y org/apache/SomeOtherClass.class respectivamente.Tenga cuidado al intentar definir varias clases en un único archivo Java (es posible para clases privadas, pero no se recomienda) y siga esta estructura de directorio hasta que se sienta más cómodo con el entorno de desarrollo.

  2. En Java, tiene los conceptos de ruta de clases y cargador de clases que no se asignan fácilmente a C# (existen equivalentes aproximados que la mayoría de los desarrolladores de .NET no utilizan comúnmente).Classpath le dice a la máquina virtual Java dónde se encuentran las bibliotecas y las clases (¡tanto las suyas como las compartidas del sistema!), y puede pensar en los cargadores de clases como el contexto en el que viven sus tipos.Los cargadores de clases se utilizan para cargar tipos (archivos de clase) desde varias ubicaciones (disco local, Internet, archivos de recursos, etc.), pero también limitan el acceso a esos archivos.Por ejemplo, un servidor de aplicaciones como Tomcat tendrá un cargador de clases para cada aplicación o contexto registrado;esto significa que una clase estática en la aplicación A no será la misma que una clase estática en la aplicación B, incluso si tienen el mismo nombre y comparten el mismo código base.AppDomains proporciona una funcionalidad algo similar en .NET.

  3. La biblioteca de clases Java es similar a BCL;Muchas de las diferencias son cosméticas, pero son suficientes para que busques la documentación (y/o Google) una y otra vez.Desafortunadamente, no creo que haya nada que hacer aquí; simplemente te familiarizarás con las bibliotecas a medida que avanzas.

Línea de fondo:la única forma de asimilar Java es usarlo.La curva de aprendizaje no es pronunciada, pero prepárese para sorprenderse y frustrarse con bastante frecuencia durante los primeros dos o tres meses de uso.

La respuesta corta es: será molesto, pero no difícil.

Java y C# tienen los mismos conceptos subyacentes, y muchas de las bibliotecas tienen un estilo muy parecido, pero seguirás chocando con varias diferencias.

Si estás hablando de propiedades de clase, Java las tiene.La sintaxis es

public class MyClass {
    public static int MY_CLASS_PROPERTY = 12;
}

Te sugiero seriamente que consigas un IDE mejor.Cualquiera de Netbeans, Eclipse, IDEA, JBuider hará que su transición sea mucho más placentera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top