Existe um auto
tipo de variável em Java como você tem em C ++?
Um exemplo:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Eu sei que existe um loop for aprimorado em Java, mas existe um auto? Se não, existe um hack para fazer isso? Estou me referindo ao novo recurso em C ++ 11
Object
, portanto, para algumas operações, você pode usarObject
onde quiserauto
.to_string
função do objeto , e não o objeto real em questão, não é?Respostas:
Respondido antes de a pergunta ser EDITADA :
Não, não há
auto
tipo de variável em Java. O mesmo loop pode ser alcançado como:Java possui variáveis locais, cujo escopo está dentro do bloco onde foram definidas. Semelhante a C e C ++, mas não há palavra-chave auto ou register. No entanto, o compilador Java não permitirá o uso de uma variável local não explicitamente inicializada e fornecerá um erro de compilação (ao contrário de C e C ++, onde o compilador normalmente fornecerá apenas um aviso). Cortesia: Wikipedia .
Não, não há nenhuma inferência de tipo convencional em Java como C ++. Houve um RFE, mas foi fechado como "Não será corrigido", o motivo fornecido foi:
fonte
Object
) não podem ser feitas assim. Essa não é realmente uma boa resposta; ela só funciona porque o exemplo na pergunta é fraco.auto
em C e pré-C ++ 11. Sua edição está fora do tópico.var
é uma palavra-chave reservada desde Java 9.Pode ser que o Java 10 tenha o que você (e eu) queremos, por meio da
var
palavra - chave.Das propostas de aprimoramento JDK 286
Atualização: Yap, esse recurso foi incluído na versão Java 10!
fonte
var
não é uma palavra-chave! Do JLS : "var não é uma palavra-chave, mas sim um identificador com significado especial como o tipo de declaração de uma variável local". Assim, ao contrário das palavras-chave, não há nada que o impeça de chamar uma variável ou método de "var".var
fato não está na lista de palavras-chave.Java 7 apresenta a sintaxe diamante
Em comparação com o antigo java
O leitor crítico notará que essa nova sintaxe não ajuda a escrever os loops for na questão original. Isso parece correto e totalmente intencional. Veja a outra resposta que cita o banco de dados de bugs da Oracle.
fonte
auto integerBox = new Box<Integer>();
HashMap<String, LinkedList<Operation, Set<Integer>>>
No Java 8, você pode usar a inferência de tipo lambda para evitar a declaração do tipo. O análogo aos exemplos do questionador seria:
ambos também podem ser simplificados usando referências de método:
fonte
Resumindo, não, não existe um tipo automático. Se tudo o que você está fazendo é imprimir o valor, você pode apenas referir-se ao valor como um
Object
.fonte
hashCode
s, ou coletando nomes de classes, ou ... você teve a ideia;) A lista é curta, no entanto. Veja a documentação da classe Object (comentário destinado a iniciantes, tenho certeza que você sabia disso SimonC)Não é uma solução Java pura, no entanto, adicionar uma biblioteca chamada lombok permitirá que a mágica abaixo compile e funcione de forma muito semelhante à
auto
palavra - chave em C ++fonte