2011-04-09 14 views
31

Digamos que tengo este código¿Cómo puedo crear algún tipo de alias variable en Java

Map<String, String> list = new HashMap<String, String>(); 
list.put("number1", "one"); 
list.put("number2", "two"); 

cómo puedo hacer un poco de "alias" el tipo

Map<String, String> 

a algo que más fácil que ser reescritos como

// may be something like this 
theNewType = HashMap<String, String>; 

theNewType list = new theNewType(); 
list.put("number1", "one"); 
list.put("number2", "two"); 

básicamente mi pregunta es, cómo crear "alias" de algún "tipo", por lo que puede hacer que sea más fácil de escribir y más fácil WH es necesario cambiar todo el código del programa.

Gracias, y lo siento si esta es una pregunta tonta. Soy un poco nuevo en Java.

Respuesta

37

No hay alias en Java. Se puede extender la clase HashMap con su clase como esta:

public class TheNewType extends HashMap<String, String> { 
    // default constructor 
    public TheNewType() { 
     super(); 
    } 
    // you need to implement the other constructors if you need 
} 

Pero hay que tener en cuenta que esta será una clase que no será la misma a medida que escribe HashMap<String, String>

+3

@Lee - salvedad de KARASZI István acerca de los tipos es importante - ver http://www.ibm.com/developerworks/java/library/j-jtp02216/index.html – McDowell

+0

de agradecimiento tú. Estoy usando esto por el momento. esto ayuda mucho – Lee

+1

Hay un truco/truco alternativo que puede hacer con genéricos: http://stackoverflow.com/questions/5604390/how-do-i-create-some-variable-type-alias-in-java/27536347#27536347 –

0

Nada de eso existe en Java. Es posible que pueda hacer algo con plantillas IDE o autocompletado, y esperar (limitado) generics type inference en Java 7.

8

No hay equivalente en typedef Java, y no hay un idioma común para los tipos de aliasing. Supongo que se podría hacer algo como

class StringMap extends HashMap<String, String> {} 

pero esto no es común y no sería obvio para un mantenedor del programa.

+3

+1 - y es un tipo nuevo, no un alias de tipo. –

+0

Tenga en cuenta que debe implementar los detalles faltantes de la interfaz Serializable para su subclase, en caso de que lo haga. De lo contrario, puede encontrar curiosidades si alguna vez se encuentra en una situación en la que necesita (de) serializar su objeto. – nasukkin

0

El más cercano podría pensar es hacer una clase contenedora igual que

class NewType extends HashMap<String, String> { 
    public NewType() { } 
} 

Realmente deseo de Java tenía una característica aliasing tipo de sonido.

+0

gracias por las ayudas. Ayuda mucho. – Lee

7

Aunque Java no es compatible con esto, puede usar un truco genérico para simularlo.

class Test<I extends Integer> { 
    <L extends Long> void x(I i, L l) { 
     System.out.println(
      i.intValue() + ", " + 
      l.longValue() 
     ); 
    } 
} 

Fuente: http://blog.jooq.org/2014/11/03/10-things-you-didnt-know-about-java/

+2

No estoy seguro de por qué odias a OP y quieres que sea asesinado por compañeros de trabajo – shabunc

Cuestiones relacionadas