【问题标题】:How do I create some variable type alias in Java如何在 Java 中创建一些变量类型别名
【发布时间】:2011-08-02 00:59:57
【问题描述】:

假设我有这个代码

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 新手。

【问题讨论】:

    标签: java types hashmap alias


    【解决方案1】:

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

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

    但请记住,这将是一个与您键入 HashMap&lt;String, String&gt; 不同的类

    【讨论】:

    【解决方案2】:

    Java 中没有typedef 等价物,也没有别名类型的通用习惯用法。我想你可以做类似的事情

    class StringMap extends HashMap<String, String> {}
    

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

    【讨论】:

    • 请记住,如果您这样做,您应该为您的子类实现 Serializable 接口的缺失细节。否则,如果您遇到需要(反)序列化对象的情况,您可能会遇到好奇心。
    【解决方案3】:

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

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

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

    【讨论】:

    • 我不知道你到底为什么讨厌 OP 并希望他被同事打死
    • IMO 这与其他答案中的想法相同,因为您使用派生的概念来获取新的类型名称。这里是来自IntegerI 和来自LongL,通过约束类型变量,其他答案通过构造一个新类从HashMap&lt;String,String&gt; 提出NewType。类型变量方法的缺点是您只能在类型变量的范围内使用它,例如Test 类或 x 方法。
    【解决方案4】:

    能想到的最接近的方法是像这样制作一个包装类

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

    我真希望 Java 有一个健全的类型别名功能。

    【讨论】:

      【解决方案5】:

      Java 中没有类似的东西。您也许可以使用 IDE 模板或自动完成功能做一些事情,并期待 Java 7 中的(有限)generics type inference

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-24
        • 2021-02-04
        • 2013-11-14
        • 1970-01-01
        • 2015-05-07
        • 2019-09-29
        相关资源
        最近更新 更多