2015-12-29 64 views
5

Sto sviluppando un plugin per un'applicazione RCP. All'interno dello plugin.xml, ho bisogno di registrare alcune classi in un determinato punto di estensione. Una di queste classi è un anonimo classe definita in questo modo (?):Riferimento a una classe anonima?

package de.me.mypackage; 

import org.something.AnotherClass; 

public class ClassOne { 
    ... 
    public static AnotherClass<ClassOne> getThat() { 
    return new AnotherClass<ClassOne>() { 
     ... 
    }; 
    } 

}

Esiste un modo per fare riferimento AnotherClass<ClassOne> all'interno del plugin.xml?

Ho già provato qualcosa come de.me.mypackage.ClassOne$AnotherClass ma questo non funziona. Devo dichiarare tale classe all'interno del proprio file per poterla fare riferimento?

risposta

2

Per quanto ne so, sarebbe un indice numerico:

class Bla { 
    public static void main(String[] args) { 
    (new Runnable() { 
     public void run() { 
     System.out.println(getClass().getName()); // prints Bla$1 
     } 
    }).run(); 
    } 
} 

Dopo la compilazione, si ottiene:

$ ls *.class 
Bla$1.class Bla.class 

Detto questo, non si può contare sulla numerazione nel caso in cui il file sorgente è stato modificato.

Potete invece definire una static classe interna, come:

public class ClassOne { 

    public static class MyClass extends AnotherClass<ClassOne> { 
    public MyClass(/* arguments you would pass in getThat()? */) { 
     ... 
    } 
    ... 
    } 

    public static AnotherClass<ClassOne> getThat() { 
    return new MyClass(...); 
    } 
} 
+0

Grazie per tutti i suggerimenti! @ Vlad: Creare una classe interna statica sembra essere la soluzione migliore per il mio caso e funziona. Potrei quindi fare riferimento a quella classe con "de.me.mypackage.ClassOne $ MyClass". – July

0

Il simbolo del dollaro entra in gioco solo nel nome binario ; nell'origine Java, basta usare de.me.mypackage.ClassOne.AnotherClass.class.

1

ho bisogno di dire l'ovvio qui - si dovrebbe rendere una classe denominata se si vuole fare riferimento ad esso. Se è possibile accedervi altrimenti è una curiosità tecnica (che non conosco la risposta a), non qualcosa che dovresti effettivamente fare in produzione.

Problemi correlati