| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2010 09:59:12
|
marthian_2
JavaBaby
![[Avatar]](/images/avatar/ef86e2c126d3fbb45783c5ccd26daed2.jpg)
Membro desde: 24/09/2007 12:44:38
Mensagens: 92
Offline
|
Pessoal, é possível criar um novo tipo primitivo pra JAVA?
Se não, qual o motivo?
Vlw!
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2010 10:05:31
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
Como assim? Existem apenas 7 tipos primitivos:
byte, char, short, int, long, double, float
sendo que "char" é mais ou menos como se fosse "unsigned short" do C / C++ / C#.
Foi sugerida a inclusão do tipo primitivo "fixnum" que seria um BigInteger ou BigDecimal mas sem várias inconveniências delee, mas isso vai ficar para as calendas gregas, provavelmente, apesar da simpatia por isso que os principais arquitetos do Java têm por esse tipo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2010 10:07:01
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
O motivo, provavelmente, é que você teria de mudar muita coisa no Java. Muita coisa mesmo; isso seria algo tão ou mais traumático que a inclusão dos Generics, em termos de ferramentas e estrutura da JVM. Por exemplo, você teria de criar novos bytecodes para suportar esses novos tipos primitivos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2010 10:16:59
|
marthian_2
JavaBaby
![[Avatar]](/images/avatar/ef86e2c126d3fbb45783c5ccd26daed2.jpg)
Membro desde: 24/09/2007 12:44:38
Mensagens: 92
Offline
|
É que uma das propostas pra minha dissertação de mestrado é o desenvolvimento de um tipo intervalar. Sei que é possivel fazer isso através da criação de uma biblioteca. Mas queria saber se poderia ficar um tipo mesmo de Java.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2010 11:21:02
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
Procure por "interval-based arithmetic", você vai achar muitas coisas prontas em várias linguagens.
Se você é ligado em teoria de compiladores, poderia bolar uma extensão à linguagem Java (na verdade, uma modificação do Javac) para que aceitasse tipos intervalares.
Infelizmente não é possível em Java efetuar um "overload" de um operador. Não posso ter algo como:
Em C++ posso fazer os overloads mas a definição de constantes ainda deixa a desejar. OU seja, em C++ eu teria de escrever:
This message was edited 1 time. Last update was at 17/08/2010 11:21:52
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/08/2010 13:06:45
|
Bruno Laturner
JWizard
![[Avatar]](/images/avatar/5800ccd9514fd789d08e5831951aa6bc.jpg)
Membro desde: 18/02/2008 16:17:53
Mensagens: 2981
Offline
|
Classes já são tipo de dados, e os métodos são seus operadores.
É possível fazer um A = B + C em outras linguagens onde A, B, e C são objetos, + e = são os métodos, mas essa sintaxe não é possivel em Java.
Mudar a sintaxe, colocar outros tipo primitivos, etc o que vai acontece é que você estará fabricando outra linguagem diferente de Java.
|
A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2010 16:17:25
|
marthian_2
JavaBaby
![[Avatar]](/images/avatar/ef86e2c126d3fbb45783c5ccd26daed2.jpg)
Membro desde: 24/09/2007 12:44:38
Mensagens: 92
Offline
|
Mas é possível criar uma classe Intervalo?
Tipo.. como é feito com o String?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2010 16:24:29
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
É claro que é possível. O único problema é que os operadores (+, -, * etc.) não podem ser redefinidos para trabalhar com objetos do tipo Intervalo.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2010 16:27:43
|
marthian_2
JavaBaby
![[Avatar]](/images/avatar/ef86e2c126d3fbb45783c5ccd26daed2.jpg)
Membro desde: 24/09/2007 12:44:38
Mensagens: 92
Offline
|
Desculpa minha ignorância.. heheh
Mas porque não podem ser redefinidos?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2010 16:33:56
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5089
Online
|
Porque a linguagem não deixa. O C# (que roda no ambiente .NET) e a linguagem Scala (que roda na JVM) deixam.
Para ver quanta gente quer que o Java deixe redefinir operadores, veja este lugar:
http://bugs.sun.com/view_bug.do?bug_id=4905919
Entretanto, o pessoal da Sun/Oracle bate o pé firmemente indicando que tão cedo não vão deixar redefinir operadores.
http://java.sun.com/docs/white/langenv/Simple.doc2.html#4098
This message was edited 1 time. Last update was at 01/09/2010 16:35:22
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/09/2010 16:49:07
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 19489
Localização: Curitiba/PR
Offline
|
entanglement wrote:Entretanto, o pessoal da Sun/Oracle bate o pé firmemente indicando que tão cedo não vão deixar redefinir operadores.
O que é uma pena, na minha opinião, sou do time que adoraria um recurso desses. Não vejo onde há simplificação no código. É só comparar a sintaxe com e sem sobrecarga: A sobrecarga deixa o código mais legível e mais natural de ler além de permitir o uso dos parênteses. Depois, que quer coisa mais ilegível do que a sintaxe dos generics? Iria simplificar muito classes como a BigDecimal, BigInteger, classe matemáticas como essa de intevalo, vetores, matrizes, a classe AffineTransform, as collections (que poderiam ser acessadas como arrays primitivos), etc... etc... Acho que a comunidade java já é madura o suficiente para não cometer os erros quanto à sobrecarga do C++. Mesmo em C++, faz tempo que esses erros não são cometidos.
This message was edited 1 time. Last update was at 01/09/2010 17:04:03
|
|
|
 |
|
|