oi! descobri esse forum hoje pq alguem do forum unidev me indicou. muito bom aki
bom, vo copiar meu post la do unidev e colar aki.
[quote]bom, obrigado a kem ler/responder!
keria saber se tem algum jeito de fazer o casting d um tipo primitivo (no meu caso específico, um int) em um tipo definido por mim (q nesse caso eh um tipo pra representar fraçoes, com 2 inteiros, numerador e denominador)… em C# tem como vc fazer isso:
int valorInt;
MeuTipo valorMeuTipo = (MeuTipo) valorInt;
bastando sobrecarregar um operador explicit (ou implicit pra converte automaticamente como eu keria). no caso do Java q nao tem sobrecarga d operadores eu nao sei faze. Eu extendi Number, mas nao adianto… em Number soh tem pra converte do MeuTipo pros tipos primitivos e nao ao contrario
eu criei os metodos pra somar, subtrair multiplicar e dividir as fraçoes mas keria que, se eu passasse um int como argumento e nao um objeto do meu tipo, ele convertesse automaticamente (ou q eu pudesse converter explicitamente mesmo, do jeito q eu escrevi no exemplo). Se alguem puder ajudar com qualquer ideia eu agradeço!
obs.: o casting seria apenas transformar o int em numerador e colocar 1 como denominador[/quote]
nem sabia q tinha outras linguagems pra JVM! :shock:
mesmo assim ainda nem sei java direito axo melhor nao tentar aprender outra linguagem ainda… ainda mais q o resto do codigo da aplicaçai ja ta todo feito em java… essa classe d numeros racionais era soh um detalhe eu soh keria um jeito melhor de faze a interface publica da classe… a gente fica mau acustumado depois q conhece a elegancia cristalina do C# hehe
brigado d novo thingol! se nao tem jeito entao tudo bem!
PS.: vou postar o link da sua resposta no forum da unidev pq o amigo q me indicou esse forum aki pidiu q eu fizesse isso case respondessem. Se vc nao kiser q eu faça isso avisa e eu deleto o link. vlw
Bom, me atendo ao Java, vc nao faz casting de tipos primitivos pq eles não são objetos. Para isso, vc poderia usar os Wrappers dos primitivos, que no caso de int, seria a classe Integer.
Uma coisa que vc poderia fazer é definir um construtor em sua classe que fizesse uso do int,
SeuTipo seuTipo=new SeuTipo(0)
“Elegância cristalina” do C#?
Você está brincando.
De qualquer maneira, mesmo em C# não é muito adequado você ficar fazendo overloading de operadores, a menos que você saiba o que está fazendo.
No seu caso em particular (criar uma classe de números racionais) eu diria que seria a melhor solução mesmo.
Mas em outros casos é melhor ser “burrinho” mesmo e proceder como no Java, onde você não tem surpresas ao ler o código ("+" é sempre uma soma, ou concatenação no caso de strings, e ponto final.)
@renzonuccitelli: eu tenho esse contrutor eh assim q eu to fazendo mesmo! valew
@renzonuccitelli: com a classe Integer teria como eu faze um casting pra MeuTipo?? :?
@thingol: o overloading de operadores explicit eh bem adequado ja q por ser explicito, vc se compromete a saber oq ta fazendo nao eh nada alem d ensinar como converter de um determinado tipo pra outro
talvez seja kestao de opiniao… sei pouco sobre performance compatibilidade bugs vulnerabilidades e etc… quanto a isso num tenho como defende nem ataca nenhuma linguagem. mas quanto a clareza do codigo e elegancia da linguagem C# eh sim bem superior ao Java
[quote=kvikasilfur]obrigado d novo pelo interesse!
@renzonuccitelli: eu tenho esse contrutor eh assim q eu to fazendo mesmo! valew
@renzonuccitelli: com a classe Integer teria como eu faze um casting pra MeuTipo?? :?
@thingol: o overloading de operadores explicit eh bem adequado ja q por ser explicito, vc se compromete a saber oq ta fazendo nao eh nada alem d ensinar como converter de um determinado tipo pra outro
talvez seja kestao de opiniao… sei pouco sobre performance compatibilidade bugs vulnerabilidades e etc… quanto a isso num tenho como defende nem ataca nenhuma linguagem. mas quanto a clareza do codigo e elegancia da linguagem C# eh sim bem superior ao Java[/quote]
Bom, pra fazer o casting, isso teria que significar que seu tipo herda de Integer.
Nesse caso, vc poderia fazer
SeuTipo seuTipo= (SeuTipo) parametro
Mas uma coisa: vc teria que saber que o parametro é da instancia da classe ou subclasse de SeuTipo. Já vi isso ser necessário qdo estava usando o Pattern Command
Isso é o que eu chamo de “mexer em vespeiro que está quieto”
Na minha opinião, é tudo a mesma coisa… Clareza e elegância de código, quem define é o desenvolvedor. Mas que a sobrecarga de operadores seria muito bem vinda no Java, seria. Quando programava em C++ e “migrei” para Java, foi algo da qual senti falta (tudo bem que eu abusava disso ).
Existem as classes BigInteger e BigDecimal que você poderia herdar na sua classe mas não há autoboxing neste caso.
Mas o que seria esse questionamento? Vc quer saber se isso está certo? Ou é um exemplo misturado com questionamento de, “seria isso o q vc quer?” ?
de qualquer modo, está errado.
//Ou
double numero = 1.1;
//Ou
double numero = (double) 1.1f; //Mas tbm não seria necessário o cast explícito
//Ou
float b = (float) 1.1; //Neste caso sim, precisa ser explícito.