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

Lee*_*Lee 52 java alias types hashmap

让我说我有这个代码

Map<String, String> list = new HashMap<String, String>();
list.put("number1", "one");
list.put("number2", "two");
Run Code Online (Sandbox Code Playgroud)

我该如何制作一些"别名"类型

Map<String, String>
Run Code Online (Sandbox Code Playgroud)

更容易被重写的东西

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

theNewType list = new theNewType();
list.put("number1", "one");
list.put("number2", "two");
Run Code Online (Sandbox Code Playgroud)

基本上我的问题是,如何为某些"类型"创建"别名",因此当需要更改整个程序代码时,我可以更容易编写和更容易.

谢谢,对不起,如果这是一个愚蠢的问题.我是Java的新手.

KAR*_*ván 47

Java中没有别名.你可以HashMap用你的类扩展类,如下所示:

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

但请记住,这将是一个类,它将与您键入的不同 HashMap<String, String>

  • @Lee - KARASZIIstván关于类型的警告很重要 - 请参阅http://www.ibm.com/developerworks/java/library/j-jtp02216/index.html (3认同)
  • 但是因为这是一个更通用的类型的特化,你不能使用 `TheNewType` 代替 `HashMap&lt;String, String&gt;`,就像你不能使用后者一样,其中一个 `Map&lt;String, String&gt; ` 返回。 (2认同)

Rom*_*om1 12

typedef在Java中没有等价物,并且对于别名类型没有共同的习惯用法.我想你可以做点什么

class StringMap extends HashMap<String, String> {}
Run Code Online (Sandbox Code Playgroud)

但这并不常见,对于程序维护者来说并不明显.

  • +1 - 它是一种新类型而不是类型别名. (5认同)
  • 请记住,您应该为您的子类实现 Serializable 接口的缺失细节,如果您这样做的话。否则,如果您遇到需要(反)序列化对象的情况,您可能会遇到好奇心。 (2认同)

And*_*rey 8

虽然Java不支持这一点,但您可以使用泛型技巧来模拟它.

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

资料来源:http://blog.jooq.org/2014/11/03/10-things-you-didnt-know-about-java/

  • 我不确定你为什么要讨厌OP,并希望他被同事殴打致死 (23认同)