Как создать псевдоним типа переменной в Java - PullRequest
45 голосов
/ 09 апреля 2011

допустим, у меня есть этот код

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.

Ответы [ 5 ]

45 голосов
/ 09 апреля 2011

В 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<String, String>

10 голосов
/ 09 апреля 2011

В Java нет эквивалента typedef, и для псевдонимов нет единой идиомы. Я полагаю, вы могли бы сделать что-то вроде

class StringMap extends HashMap<String, String> {}

но это не распространено и не будет очевидным для сопровождающего программы.

8 голосов
/ 18 декабря 2014

Хотя 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/

4 голосов
/ 09 апреля 2011

Самое близкое, что можно придумать, - это создать класс-оболочку примерно так:

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

Мне бы очень хотелось, чтобы в Java была функция наложения звукового типа.

1 голос
/ 09 апреля 2011

Ничего подобного в Java не существует. Возможно, вы сможете что-то сделать с помощью шаблонов IDE или автозаполнения, и с нетерпением ждем (ограниченного) вывода обобщенных типов в Java 7.

...