如何在 Java 中创建一些变量类型别名

假设我有这个密码

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

我怎样才能使一些“别名”的类型

Map<String, String>

变得更容易被改写

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


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

基本上我的问题是,如何创建“别名”的一些“类型”,所以我可以使它更容易编写和更容易时,需要改变整个程序代码。

谢谢,如果这是个愚蠢的问题,抱歉,我对 Java 还是个新手。

59674 次浏览

Nothing like that exists in Java. You might be able to do something with IDE templates or autocompletion, and look forward to (limited) generics type inference in Java 7.

There are no aliases in Java. You can extend the HashMap class with your class like this:

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

But keep in mind that this will be a class it won't be the same as you type HashMap<String, String>

There is no typedef equivalent in Java, and there is no common idiom for aliasing types. I suppose you could do something like

class StringMap extends HashMap<String, String> {}

but this is not common and would not be obvious to a program maintainer.

The closest one could think of is to make a wrapper class like so

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

I really wish Java had a sound type aliasing feature.

Although Java doesn't support this, you can use a generics trick to simulate it.

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

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