Pergunta

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 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 olhar me Borland C ++ lembra 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 extravagantes refatoração.

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

Foi útil?

Solução

Este cara aqui teve que fazer o inverso transição. Então, ele listou as 10 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 / test

Gotcha # 8 - O que aconteceu com Super

Em Java para se referir à superclasse você usar o super palavra reservada em vez de base

Gotcha # 7 - Encadeamento construtores para uma base construtor

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 A meio classe é uma subclasse de B classe. Em C # seria class A : B

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

Para definir uma constante em Java usar a palavra-chave final vez de const

Gotcha # 4 - Onde está ArrayList, Vector ou Hashtable

Maioria das estruturas de dados usados ??em java são HashSet, ArrayList e HashMap. Eles implementar Set, List e Map. Claro, há um mais monte. 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 Obtém 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 precisa declarar uma virtual método em Java. Todos os métodos - exceto aqueles final declarou -. Pode ser substituído em Java

E o # 1 pegadinha ...

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

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

Outras dicas

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.Exception e tudo o que dela deriva, e RuntimeException. Isto é significativo porque em exceções Java são verificados ; Isto significa que, a fim de lançar qualquer exceção non-runtime você também precisa adicionar uma anotação throws à sua declaração de método. Consequentemente, qualquer método que utiliza o seu vai ter que pegar essa exceção ou declarar que it , também lança a mesma exceção. Um grande número de exceções que você toma para concedido, como NullPointerException ou IllegalArgumentException, na verdade derivam de RuntimeException e 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. Apesar de Java tem apoiado 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 int tanto como um tipo de valor e tipo de referência, em Java não são literalmente o mesmo tipo: você recebe o primitivo tipo de valor int eo 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> vez de ArrayList<int>), e os métodos de utilitário (como parse ou 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 é declarada com o modificador static é chamado de 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 a dor relativamente pouco sintática.

  4. Os 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 compatibilidade com VMs mais velho. Sem genéricos diretos apoiar no tempo de execução, Java implementa genéricos usando uma técnica chamada 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 parametrizado tipos genéricos em Java não têm diferentes tipos de tempo de execução . Em outras palavras, após a compilação dos tipos ArrayList<Integer> e ArrayList<String> são equivalente . Se você trabalha fortemente com os genéricos que você vai encontrar essas diferenças muito mais cedo do que você pensa.

Existem, na minha opinião, os três aspectos mais difíceis do idioma 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.SomeClass e org.apache.SomeOtherClass vai literalmente ser encontrada em com/example/SomeClass.class e org/apache/SomeOtherClass.class respectivamente. Seja cauteloso de tentar definir várias classes em um único arquivo Java (é possível para aulas particulares, mas não recomendado), e vara 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 (ambos 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 tipos de carga (arquivos de classe) de vários locais (disco local, internet, arquivos de recursos, whatnot), mas também o acesso Restringir 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. AppDomains fornecer funcionalidade um pouco semelhante em .NET.

  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ê vai apenas familiaridade de compilação com as bibliotecas que você vá

  4. .

A linha inferior: 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.

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 sugiro seriamente que você obter um IDE melhor. Qualquer uma Netbeans, Eclipse, IDEA, JBuider vai fazer a sua transição muito mais agradável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top