web-dev-qa-db-ja.com

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に慣れていない。

46
Lee

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>と入力したクラスとは異なるクラスになることに注意してください

45
KARASZI István

Javaにはtypedefに相当するものはなく、エイリアシング型の一般的なイディオムもありません。次のようなことができると思います

class StringMap extends HashMap<String, String> {}

しかし、これは一般的ではなく、プログラム管理者には明らかではありません。

11
Rom1

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/

8
Andrey

最も近いものは、そのようなラッパークラスを作成することです

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

Javaにサウンドタイプのエイリアス機能があればいいのに。

4
Ingo

Javaにはそのようなものはありません。 IDEテンプレートまたはオートコンプリートで何かを行うことができ、(制限付き) ジェネリック型推論 in Java 7。

1