Domanda

Recentemente ho iniziato a sviluppare applicazioni per il Blackberry.Di conseguenza, ho dovuto passare a Java-ME e imparare questo e gli strumenti associati.La sintassi è semplice, ma continuo ad avere problemi con vari trucchi e l'ambiente.

Ad esempio, qualcosa che mi ha sorpreso e mi ha fatto perdere molto tempo è l'assenza di proprietà reali su un oggetto di classe (qualcosa che presumevo avessero tutti i linguaggi OOP).Ci sono molti trucchi.Sono stato in vari posti in cui confrontano la sintassi Java con C#, ma non sembra che ci siano siti che indichino le cose a cui prestare attenzione quando si passa a Java.

L'ambiente è tutta un'altra questione tutta insieme.L'IDE del Blackberry è semplicemente orribile.L'aspetto mi ricorda Borland C++ per Windows 3.1: è così obsoleto.Alcuni degli altri problemi includevano IntelliSense discontinuo, debug debole, ecc...Blackberry ha una beta del plugin Eclipse, ma senza supporto per il debug, è solo un editor con fantasiosi strumenti di refactoring.

Quindi, qualche consiglio su come integrarsi con Java-ME?

È stato utile?

Soluzione

Questo ragazzo qui dovevo fare la transizione inversa.Quindi ha elencato le 10 principali differenze tra Java e C#.Prenderò i suoi argomenti e mostrerò come è realizzato in Java:

Gotcha #10 - Dammi il mio output standard!

Per stampare sullo standard output in Java:

System.out.println("Hello");

Punto 9: Spazi dei nomi == Libertà

In Java non hai la libertà degli spazi dei nomi.La struttura delle cartelle della tua classe deve corrispondere al nome del pacchetto.Ad esempio, una classe nel pacchetto org.test deve essere nella cartella org/prova

Gotcha #8 - Cos'è successo a Super?

In Java per riferirsi alla superclasse si usa la parola riservata super invece di base

Gotcha #7 - Concatenare i costruttori a un costruttore di base

Non hai questo in Java.Devi chiamare il costruttore da solo

Gotcha #6 - Dagnabit, come faccio a creare una sottoclasse di una classe esistente?

Per creare una sottoclasse di una classe in Java, procedi come segue:

public class A extends B {
}

Ciò significa classe A è una sottoclasse di classe B.In C# sarebbe class A : B

Gotcha #5 - Perché le costanti non rimangono costanti?

Per definire una costante in Java utilizzare la parola chiave final invece di const

Gotcha #4 - Dov'è ArrayList, Vector O Hashtable?

Le strutture dati più utilizzate in Java sono HashSet, ArrayList E HashMap.Implementano Set, List E Map.Naturalmente, c'è molto di più.Ulteriori informazioni sulle collezioni Qui

Gotcha #3 - Di accessori e mutatori (getter e setter)

Non hai la funzione Proprietà in Java.Devi dichiarare tu stesso i metodi get e set.Naturalmente, la maggior parte degli IDE può farlo automaticamente.

Gotcha #2 - Non posso sovrascrivere!?

Non è necessario dichiarare un metodo virtual a Giava.Tutti i metodi, tranne quelli dichiarati final - può essere sovrascritto in Java.

E il trucco n. 1...

In Java i tipi primitivi int, float, double, char E long non sono ObjectÈ come in C#.Tutti hanno una rispettiva rappresentazione dell'oggetto, come Integer, Float, Double, eccetera.

Questo è tutto.Non dimenticare di vedere il collegamento originale, c'è una discussione più dettagliata.

Altri suggerimenti

Java non è significativamente diverso da C#.A livello puramente sintattico, ecco alcuni suggerimenti che potrebbero aiutarti a superare la giornata:

  1. In Java hai due famiglie di eccezioni: java.lang.Exception e tutto ciò che ne deriva, e RuntimeException.Questo è significativo perché in Java lo sono le eccezioni controllato;questo significa che per lanciare qualsiasi eccezione non runtime è necessario aggiungere anche un file throws annotazione alla dichiarazione del metodo.Di conseguenza, qualsiasi metodo che utilizzi il tuo dovrà rilevare quell'eccezione o dichiararla Esso lancia anche la stessa eccezione.Molte eccezioni che dai per scontate, come NullPointerException O IllegalArgumentException, infatti derivano da RuntimeException e quindi non è necessario dichiararli.Le eccezioni verificate sono un punto di contesa tra due discipline, quindi ti consiglio di provarle tu stesso e vedere se ti aiuta o ti infastidisce.A livello personale, penso che le eccezioni controllate migliorino significativamente il factoring e la robustezza del codice.

  2. Sebbene Java supporti l'autoboxing da un po' di tempo, ci sono ancora alcune differenze tra le implementazioni C# e Java di cui dovresti essere a conoscenza.Mentre in C# puoi usare in modo intercambiabile int sia come tipo di valore che come tipo di riferimento, in Java non sono letteralmente dello stesso tipo:ottieni il tipo di valore primitivo int e il tipo di riferimento della libreria java.lang.Integer.Ciò si manifesta in due modi comuni:non puoi utilizzare i tipi di valore come parametro di tipo generico (quindi utilizzerai ArrayList<Integer> invece di ArrayList<int>) e i metodi di utilità (come parse O toString) sono implementati staticamente nel tipo di riferimento (quindi non lo è int a; a.toString(); ma piuttosto int a; Integer.toString( a );).

  3. Java ha due tipi distinti di classi nidificate, C# ne ha solo una.In Java una classe statica che non è dichiarata con il file static il modificatore è chiamato an classe interiore, e ha accesso implicito all'istanza della classe che lo racchiude.Questo è un punto importante perché, a differenza di C#, Java non prevede il concetto di delegati e le classi interne vengono molto spesso utilizzate per ottenere lo stesso risultato con relativamente poca fatica sintattica.

  4. I generici in Java sono implementati in modo radicalmente diverso rispetto a C#;quando sono stati sviluppati i generici per Java è stato deciso che le modifiche sarebbero state puramente sintattiche senza supporto runtime, al fine di mantenere la compatibilità con le macchine virtuali più vecchie.Senza supporto diretto dei generici nel runtime, Java implementa i generici utilizzando una tecnica chiamata cancellazione del tipo.Ci sono alcuni svantaggi nella cancellazione dei tipi rispetto all'implementazione C# dei generici, ma il punto più importante da prendere da questo è che i tipi generici parametrizzati in Java non hanno tipi di runtime diversi.In altre parole, dopo aver compilato i tipi ArrayList<Integer> E ArrayList<String> Sono equivalente.Se lavori molto con i generici incontrerai queste differenze molto prima di quanto pensi.

Ci sono, a mio parere, i tre aspetti più difficili del linguaggio da gestire per uno sviluppatore C#.Oltre a questo ci sono gli strumenti di sviluppo e la libreria di classi.

  1. In Java esiste una correlazione diretta tra il pacchetto (spazio dei nomi), il nome della classe e il nome del file.In una directory root comune, le classi com.example.SomeClass E org.apache.SomeOtherClass sarà letteralmente trovato dentro com/example/SomeClass.class E org/apache/SomeOtherClass.class rispettivamente.Fai attenzione a provare a definire più classi in un singolo file Java (è possibile per classi private, ma non consigliato) e attieniti a questa struttura di directory finché non ti senti più a tuo agio con l'ambiente di sviluppo.

  2. In Java hai i concetti di percorso di classe e caricatore di classi che non si associano facilmente a C# (esistono equivalenti approssimativi che non sono di uso comune dalla maggior parte degli sviluppatori .NET).Classpath indica alla Java VM dove si trovano le librerie e le classi (sia le tue che quelle condivise del sistema!), e puoi pensare ai caricatori di classi come al contesto in cui vivono i tuoi tipi.I caricatori di classi vengono utilizzati per caricare tipi (file di classe) da varie posizioni (disco locale, Internet, file di risorse, quant'altro) ma anche per limitare l'accesso a tali file.Ad esempio, un server delle applicazioni come Tomcat avrà un caricatore di classi per ogni applicazione o contesto registrato;ciò significa che una classe statica nell'applicazione A non sarà uguale a una classe statica nell'applicazione B, anche se hanno lo stesso nome e anche se condividono la stessa base di codice.Gli AppDomain forniscono funzionalità in qualche modo simili in .NET.

  3. La libreria di classi Java è simile alla BCL;molte differenze sono estetiche, ma sono sufficienti per farti correre per la documentazione (e/o Google) ancora e ancora.Sfortunatamente non penso che ci sia niente da fare qui: semplicemente acquisirai familiarità con le biblioteche man mano che procedi.

Linea di fondo:l'unico modo per capire Java è usarlo.La curva di apprendimento non è ripida, ma preparati a rimanere sorpreso e frustrato abbastanza spesso durante i primi due o tre mesi di utilizzo.

La risposta breve è: sarà fastidioso, ma non difficile.

Java e C# hanno tutti gli stessi concetti di base e molte librerie hanno uno stile molto simile, ma continuerai a sbattere la testa tra varie differenze.

Se parli di proprietà delle classi, Java le ha.La sintassi è

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

Ti suggerirei seriamente di ottenere un IDE migliore.Qualsiasi Netbeans, Eclipse, IDEA, JBuider renderà la tua transizione molto più piacevole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top