Melhor maneira de realmente grok Java ME para um cara C #

votos
28

Eu tenho começado recentemente o desenvolvimento de aplicativos para o BlackBerry. Consequentemente, eu tive que ir para Java ME e aprender isso e suas ferramentas associadas. A sintaxe é fácil, mas eu continuo tendo problemas com vários truques e meio ambiente.

Por exemplo, algo que me surpreendeu e desperdiçado um monte de tempo é a ausência de imóveis em um objeto de classe (algo que eu assumiu todas as linguagens OOP tinha). Há muitas armadilhas. Eu fui a vários lugares onde eles comparam a sintaxe Java vs C #, mas não parecem ser sites que falam de coisas para olhar para fora quando se mudar para Java.

O ambiente é uma questão totalmente diferente todos juntos. O Blackberry IDE é simplesmente horrível. O visual lembra-me Borland C ++ para Windows 3.1 - é que ultrapassada. Alguns dos outros temas incluídos intellisense irregular, depuração fraco, etc ... Blackberry tem um beta do plugin Eclipse, mas sem suporte a depuração, é apenas um editor com ferramentas de refatoração de fantasia.

Assim, qualquer conselhos sobre como misturar-se para Java ME?

Publicado 18/09/2008 em 07:49
fonte usuário
Em outras línguas...                            


3 respostas

votos
49

Este cara aqui tinha que fazer a transição inversa. Então, ele listou as 10 melhores diferenças de Java e C #. Vou levar seus temas e mostrar como ele é feito em Java:

Gotcha # 10 - Dá-me a minha saída padrão!

Para imprimir para a saída padrão em Java:

System.out.println("Hello");

Gotcha # 9 - Namespaces == Liberdade

Em Java você não tem a liberdade de namespaces. A estrutura de pastas de sua classe deve corresponder ao nome do pacote. Por exemplo, uma classe no pacote org.test deve estar na pasta org / teste

Gotcha # 8 - O que aconteceu com super?

Em Java para se referir à superclasse você usa a palavra reservada superem vez debase

Gotcha # 7 - Encadeamento construtores para um construtor base

Você não tem isso em Java. Você tem que chamar o construtor por si mesmo

Gotcha # 6 - Dagnabit, como faço para subclasse uma classe existente?

A subclasse uma classe em Java fazer isso:

public class A extends B {
}

Isso significa que classe Aé uma subclasse da classe B. Em C # seriaclass A : B

Gotcha # 5 - Por que não constantes permanecem constantes?

Para definir uma constante em Java usar a palavra-chave finalem vez deconst

Gotcha # 4 - Onde está ArrayList, Vectorou Hashtable?

As estruturas de dados mais usados em Java são HashSet, ArrayListe HashMap. Eles implementar Set, Liste Map. Claro, há um monte mais. Leia mais sobre coleções aqui

Gotcha # 3 - De Accessors e Mutators (getters e setters)

Você não tem a facilidade de imóveis em Java. Você tem que declarar a recebe e define métodos para si mesmo. Claro, a maioria das IDEs pode fazer isso automaticamente.

Gotcha # 2 - Eu não posso substituir !?

Você não tem que declarar um método virtualem Java. Todos os métodos - exceto os declarados final- pode ser substituído em Java.

E o # 1 pegadinha ...

Em Java tipos primitivos int, float, double, chare longnão são Objects como em C #. Todos eles têm um respectivo representação de objeto, como Integer, Float, Double, etc.

É isso aí. Não se esqueça de ver o link original , há uma discussão mais detalhada.

Respondeu 18/09/2008 em 08:12
fonte usuário

votos
24

Java não é significativamente diferente de C #. Em um nível puramente sintática, aqui estão algumas dicas que podem levá-lo ao longo do dia:

  1. Em Java você tem duas famílias de exceções: java.lang.Exceptione tudo o que dela deriva, e RuntimeException. Isto é significativo porque em Java exceções são verificados ; isto significa que, a fim de lançar qualquer exceção non-runtime você também precisa adicionar uma throwsanotação para a sua declaração de método. Consequentemente, qualquer método que utiliza o seu vai ter que pegar essa exceção ou declarar que ele também lança a mesma exceção. Um grande número de exceções que você toma para concedido, como NullPointerExceptionou IllegalArgumentException, na verdade, derivamRuntimeExceptione você, portanto, não precisa declará-los. As exceções verificadas são um ponto de discórdia entre duas disciplinas, por isso eu recomendo que você experimentá-los para si mesmo e ver se isso ajuda ou irrita. Em um nível pessoal, eu acho que exceções verificadas melhorar factoring código e robustez significativamente.

  2. Embora Java apoiou autoboxing por um bom tempo, ainda existem algumas diferenças entre o C # e implementações de Java que você deve estar ciente. Enquanto que em C # você pode alternadamente usar inttanto como um tipo de valor e tipo de referência, em Java não são literalmente o mesmo tipo: você recebe o tipo de valor primitivo inteo tipo de referência da biblioteca java.lang.Integer. Isso se manifesta de duas formas comuns: você não pode usar os tipos de valor como um parâmetro de tipo genérico (assim que você vai usar ArrayList<Integer>em vez de ArrayList<int>), e os métodos de utilitário (como parseou toString) são estaticamente implementado no tipo de referência (por isso não é int a; a.toString();mas sim int a; Integer.toString( a );).

  3. Java tem dois tipos distintos de classes aninhadas, C # tem apenas um. Em Java uma classe estática que não é declarado com o staticmodificador é chamado de uma classe interna , e tem acesso implícito a instância da classe delimitador. Este é um ponto importante porque, ao contrário de C #, Java não tem o conceito de delegados e classes internas são muitas vezes usam para conseguir o mesmo resultado com relativamente pouca dor sintática.

  4. Genéricos em Java são implementadas de uma forma radicalmente diferente de C #; quando os genéricos foram desenvolvidos para Java, foi decidido que as mudanças serão puramente sintática sem suporte de tempo de execução, a fim de manter a compatibilidade com VMs mais velho. Sem genéricos diretos apoiar no tempo de execução, Java implementa genéricos usando uma técnica chamada Tipo de apagamento . Há algumas desvantagens para eliminação de tipo sobre o C # implantação dos genéricos, mas o ponto mais importante a tomar a partir deste é que tipos genéricos parametrizadas em Java não tem diferentes tipos de tempo de execução . Em outras palavras, após a compilação dos tipos ArrayList<Integer>e ArrayList<String>são equivalentes. Se você trabalha fortemente com os genéricos que você vai encontrar essas diferenças muito mais cedo do que você pensa.

Há, na minha opinião, os três aspectos mais difíceis da língua para um desenvolvedor C # para Grokar. Fora isso, há a ferramentas de desenvolvimento e classe biblioteca.

  1. Em Java, há uma correlação direta entre o pacote (namespace), nome da classe eo nome do arquivo. Sob um diretório raiz comum, as classes com.example.SomeClasse org.apache.SomeOtherClassvai literalmente ser encontrada em com/example/SomeClass.classe org/apache/SomeOtherClass.classrespectivamente. Seja cauteloso de tentar definir várias classes em um único arquivo Java (é possível para aulas particulares, mas não recomendado), e manter a esta estrutura de diretórios até que você esteja mais confortável com o ambiente de desenvolvimento.

  2. Em Java você tem os conceitos de classe-path e classe-loader, que não são facilmente mapeados para C # (existem equivalentes ásperas que não são de uso comum pela maioria dos desenvolvedores .NET). Classpath diz o VM Java onde as bibliotecas e classes podem ser encontrados (tanto o seu e bibliotecas compartilhadas do sistema!), E você pode pensar em carregadores de classe como o contexto em que os seus tipos de viver. carregadores de classe são usados ​​para carregar tipos (arquivos de classe) de vários locais (disco local, internet, arquivos de recursos, outros enfeites), mas também restringir o acesso a esses arquivos. Por exemplo, um servidor de aplicativos como Tomcat terá um carregador de classe para cada aplicativo registrado, ou contexto; isto significa que uma classe estática aplicação A não será o mesmo que uma classe estática aplicativo B, mesmo se eles têm o mesmo nome e mesmo se eles compartilham a mesma base de código.

  3. A biblioteca de classes Java é semelhante ao BCL; um monte das diferenças são cosméticas, mas é o suficiente para você correr para a documentação (e / ou Google) uma e outra vez. Infelizmente eu não acho que haja nada a fazer aqui - você só vai construir familiaridade com as bibliotecas que você vá.

Bottom line: a única maneira de grok Java é usá-lo. A curva de aprendizado não é íngreme, mas prepare-se para ser surpreendido e frustrado muitas vezes ao longo dos primeiros dois ou três meses de uso.

Respondeu 18/09/2008 em 10:14
fonte usuário

votos
2

A resposta curta é - que vai ser chato, mas não é difícil.

Java e C # têm todos os mesmos conceitos subjacentes, e um monte das bibliotecas estão muito perto em grande estilo, mas você está indo para manter batendo sua cabeça em várias diferenças.

Se você está falando sobre propriedades de classe, Java tem aqueles. A sintaxe é

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

Eu sugeriria seriamente que você obter um IDE melhor. Qualquer uma Netbeans, Eclipse, IDEA, JBuider vai fazer a sua transição muito mais agradável.

Respondeu 18/09/2008 em 07:56
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more