Votem pela correção desse bug

4 respostas
ViniGodoy

Eu tenho desenvolvido um pequeno framework que facilita enormemente a criação de JTables.

No eclipse funciona ok, entretanto, no Netbeans não. Motivo? Existe um bug na JVM que impede que ele funcione.

O bug é basicamente o seguinte. Suponha que você tenha um enum, que implemente uma interface qualquer:

enum UmEnum implements SomeInterface
{
     UM {
       public void run() {
             System.out.println("Um!");
       }
     },
     DOIS {
       public void run() {
             System.out.println("Dois!");
       }
     };
}

public interface SomeInterface {
   void run();
}
Se você fizer:
UmEnum.UM.run();

O código simplesmente não compila. Ele diz que o método run() não existe para o enum. :(
Se você compilar a interface antes do enum, tudo funcionará perfeitamente.

Então, estou lançando essa campanha aqui no GUJ. Votem por essa funcionalidade!
Quando estiver corrigido, posto um artigo explicando como funciona o framework por aqui...

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6330385

4 Respostas

Luca

Olá

Bug ID: 6330385:
This won’t compile with one call to javac.
But if you separately compile I and E first you can then compile
Test just fine.

Qual o inconveniente de separar a classe, o enum e a interface?

[]s
Luca

Bani

Não é bem “uma interface qualquer”. O seu exemplo de código, por exemplo, eu testei e funciona perfeitamente, aparentemente porque o Runnable já existe e já está compilado.

A gente pode até votar, mas minha sugestão é que você arranje uma forma alternativa de compilar sua framework se você faz questão de usar o Netbeans. Você pode por exemplo fazer um arquivo de build do ant, ou até um simples arquivo .bat que compile sua interface primeiro. Ficar simplesmente esperando consertarem o bug acho que não vale a pena.

P.S.: eu sei que você está dando só um exemplinho bobo, mas vale lembrar que se você estivesse implementando algo do Runnable de verdade você provavelmente estaria querendo rodar em outra thread e pra isso se usa o start da Thread e não diretamente o run().

ViniGodoy

Bani:
Não é bem “uma interface qualquer”. O seu exemplo de código, por exemplo, eu testei e funciona perfeitamente, aparentemente porque o Runnable já existe e já está compilado.

A gente pode até votar, mas minha sugestão é que você arranje uma forma alternativa de compilar sua framework se você faz questão de usar o Netbeans. Você pode por exemplo fazer um arquivo de build do ant, ou até um simples arquivo .bat que compile sua interface primeiro. Ficar simplesmente esperando consertarem o bug acho que não vale a pena.

Isso é lógico, na verdade, é o que iriamos fazer desde o início. O erro também não acontece no eclipse, que compila as classes assim que você salva. Mas, é um erro realmente chato. E, isso adiciona a pentelhação de ter que manter esse arquivo .bat ou script ant. Em suma, é um erro, não devia ser assim.

P.S.: eu sei que você está dando só um exemplinho bobo, mas vale lembrar que se você estivesse implementando algo do Runnable de verdade você provavelmente estaria querendo rodar em outra thread e pra isso se usa o start da Thread e não diretamente o run().

Discordo, nem sempre você implementa um Runnable com a intenção de criar outra thread, pelo menos não usando start. Por exemplo, que eu não poderia usar esse enum num EventQueue.invokeLater (que vai ser usado na thread do Swing), ou em qualquer outra classe que eu quisesse ter algo “rodável” nas mãos (um proxy de log, por exemplo). Também poderia usar em uma thread já criada e em pool, usando EventQueue.invokeLater.

Na verdade, a implementação de uma interface num enum, no caso da pequena framework que citei, não tem nada a ver com Runnables.

Mas você tinha razão, esse é um exemplinho bobo. E, se o assunto do tópico fosse usar threads, haveria grandes chances de você estar certo. De qualquer forma, mudei o texto ali em cima para ficar mais claro. :wink:

pnizer

Concordo…
Este é um erro chato mesmo! Eu já votei!

Criado 15 de novembro de 2007
Ultima resposta 19 de nov. de 2007
Respostas 4
Participantes 4