Gente, eu tenho que aprender mais sobre casting, e como ele funciona.
Eu fico um pouco confuso quanto a certas coisas.
Por exemplo, tenho um parâmeto que indiquei como byte. Não consigo transformar ele em String usando o toString()
Daí surge aquela máxima, de que o chefe pode ser um funcionário, mas um funcionário não pode ser chefe - Mas para mim, a transformação de um número em uma string não seria uma coisa tão complexa para a linguagem.
Eu quero saber quais casts eu posso realizar. Se vocês puderem me indicar alguns documentos ou páginas que falem a respeito, eu agradeço. Casting de objetos eu vejo mais tarde.
[quote] Number n = new Integer(10);
Integer x = (Integer) n; // possível[/quote]
Perfeito. Você criou um inteiro e deu um cast nele para inteiro mesmo, ou seja, é possível
Isso que eu acho um pouco confuso. Um inteiro cabe em um long, e dependendo do valor, o contrário não se aplicaria. Mas não estamos falando de valores, e sim de tipos.
Eu sempre posso descer um nível então? Por exemplo, eu posso dar um cast de um int pra short, mas subir eu não posso?
E como fica quando eu tenho que transformar um número para String, como no meu caso agora?
Isso, você pode dar um cast sempre para tipos que comportam mais dados, mas você não pode dar um cast de int para byte, o compilador acusaria perda de precisão.
Agora, se você quer converter um int para string pode fazer o seguinte
[quote=balarini]Eu sempre posso descer um nível então? Por exemplo, eu posso dar um cast de um int pra short, mas subir eu não posso?
E como fica quando eu tenho que transformar um número para String, como no meu caso agora?[/quote]
Para os tipos primitivos, todos os casts são possíveis, só que alguns são automáticos (ou seja, opcionais), e outros não.
long -> int : nesse caso é obrigatório, porque diminui a precisão:
long x = 10;
int y = (int) x;
int -> long : nesse caso é opcional, porque aumenta a precisão:
int x = 10;
long y = (long) x; // poderia usar long y = x;
thiago, o que você me disse ajudou bastante, mas daí já foge de casting não é verdade? Porque o código que você está passando na verdade cria uma String com o conteúdo que eu quiser, não é isso?
Eu vou estudar um pouco mais. Estava tão acostumado a utilizar outras linguagens, que esqueci alguns conceitos. Só acho que quando começar a estudar casting de Objetos, eu vou querer me jogar da janela.
Muito pelo contrário. Se você souber desenhar diagramas de classes em UML vai ver que casting só é possível seguindo as "setas". Por exemplo:
Object <- Number <- Integer
<- Long
<- String
Você pode efetuar o cast de um Long para um Number (upcast) e de um Number para um Long (downcast); de um Integer para um Long, como não há nenhuma seta ligando o Integer ao Long, não consegue fazer com certeza.
Casting é exato. O thingol quis dizer que, como Integer e Long não têm relacionamento de herança, com certeza não dá pra fazer cast.
Ocorre perda de precisão quando você quer acomodar o conteúdo de um long em um int, por exemplo. Como int não armazena a mesma quantidade de bytes que um long, você perderá a precisão indicada pelos bytes que “não couberem” no int.
Nino, toda classe em Java é filha(extends) da classe Object, que tem um método chmado toString();
Você pode na sua classe Endereço, por exemplo, sobrescrever esse método. Por exemplo, assim:
class Endereco{
String
logradouro,
numero,
complemento,
bairro,
cidade,
uf,
cep
;
Date
desde
;
/*getters e setters e outros métodos*/
/*
* @see java.lang.Object#toString()
*/
public String toString() {
return
"Logradouro: " + logradouro + "\n" +
"No.: " + numero + "\n" +
"Complemento: " + complemento + "\n" +
"Bairro: " + bairro + "\n" +
"Cidade: " + cidade + "\n" +
"UF: " + uf + "\n" +
"CEP: " + cep + "\n" +
"Residente desde: " + desde.toString()
;
}
}
Quando quiser ober a String de Endereco, é só invocar
...
Endereco endereco = new Endereco(...);
...
String end = endereco.toString();