Есть ли в Java функциональность, аналогичная анонимным типам C #? - PullRequest
9 голосов
/ 22 июля 2011

Мне было интересно, существует ли в Java аналогичная функциональность, аналогичная анонимным типам C #:

var a = new {Count = 5, Message = "A string."};

Или эта концепция противоречит парадигме Java?

РЕДАКТИРОВАТЬ:

Я предполагаю, что использование Hashable() в Java несколько похоже.

Ответы [ 3 ]

12 голосов
/ 22 июля 2011

Нет.Там нет эквивалента.В Java нет объявления переменных типа (var), которое компилятор Java мог бы заполнить автоматически сгенерированным именем типа, чтобы обеспечить доступ к a.Count и a.Message.

6 голосов
/ 22 июля 2011

Возможно, вы имеете в виду что-то вроде этого:

Object o = new Object(){
    int count = 5;
    String message = "A string.";
};

@ Commenters : конечно, это теоретический, очень неудобный пример.

Возможно, OP может использовать Map:

Map<String,Object> a = new HashMap<String,Object>();
a.put("Count", 5);
a.put("Message", "A string.");

int count = (Integer)a.get("Count"); //better use Integer instead of int to avoid NPE
String message = (String)a.get("Message");
0 голосов
/ 08 мая 2018

В Java есть функция, называемая локальными классами, которые несколько похожи. Они полезны для создания класса или реализации интерфейса, который на самом деле не нужно знать за пределами конкретного метода. Область действия локального класса ограничена блоком кода, который его определяет.

public void doSomething() {
    class SomeLocalClass {
        public int count = 5;
        public String message = "A string.";
    }

    SomeLocalClass local = new SomeLocalClass();
    System.out.println(local.count);
    System.out.println(local.message);
}

В отличие от анонимных типов в C #, локальные классы Java и их поля имеют явно определенные типы, но я предполагаю, что они могут иметь некоторые перекрывающиеся варианты использования.

...