Só uma coisinha - “desconhecido” em inglês é “unknown”, não “unknow”. Se você só precisa da representação string com espaços como retorno do método “getLabel”, então só precisa mudar esse método. É que identificadores em Java não podem ter espaços (a rigor, no Java 7 essa regra será relaxada, mas o uso será bem complexo, portanto não se recomenda usar identificadores com espaços mesmo no Java 7). No seu caso:
Engraçado, se já vem com uma recomendação dessas “de fábrica”, para que relaxar a regra, então?
I
izaura
Muito obrigada pela ajuda e explicação rapazes.
E
entanglement
Engraçado, se já vem com uma recomendação dessas “de fábrica”, para que relaxar a regra, então?
É que identificadores com espaços, caracteres especiais e outras coisas esdrúxulas serão permitidos apenas para poder suportar outras linguagens na JVM.
Mais um exemplo do abuso do #"" que pode haver no Java 7. O nome da classe tem um espaço, e algumas variáveis têm tabs ou espaços nos nomes. Entretanto, abusos têm limites. Um identificador com pontos é rejeitado porque se confunde com um identificador de pacote.
class#"TesteAbsurdo" { // Note que você não pode usar os seguintes caracteres em identificadores: ".", "/", ";", "<", ">", "[", "]". public static void #"main"(String[] #"arraydeargumentosnalinhadecomando") { for (#"String" #"cadaargumento" : #"arraydeargumentosnalinhadecomando") { String #"argumento-convertido{para\tminúsculas}" = #"cadaargumento".#"toLowerCase"(); System.#"out".println (#"argumento-convertido{para\tminúsculas}"); } }}
ViniGodoy
Suportar isso na VM eu até entendo, mas precisavam colocar isso na linguagem Java?
E
entanglement
Isso foi posto (meio que “por debaixo dos panos”) porque a ideia básica é a seguinte: você quer compilar uma linguagem como Ruby ou Python para Java e usar identificadores esquisitos.
Você poderia gerar diretamente um .class (é o que o Jython ou o JRuby fazem) ou então passar pela etapa intermediária de ter um .java.
Para facilitar o mapeamento dos identificadores originais para os de um programa .java gerado (isso, como eu disse, não ajuda em linguagens já existentes, mas nas que você poderia criar com o suporte a “invokedynamic”, o John Rose “enfiou” esse tipo de identificadores no compilador.
(Ele, obviamente, passou por cima do JLS e outras coisas - já que ele tem acesso ao repositório Mercurial da Sun e acesso de commiter no JDK, ele simplesmente enfiou isso e comunicou o fato consumado ao Joe Darcy, que é o responsável pelo Project Coin.)
ViniGodoy
Se eu fosse gerente dele, mandaria ele tirar de lá. Passar por cima da comunidade é algo muito feio e, mesmo que fosse o goetz, eu daria uma xinxada.