Как проверить общий тип & ldquo; T & rdquo; для Integer в Java? [Дубликат]

Нижеследующее может помочь любому, кто ищет реверсивную реверсию строки. Просили сделать это в недавнем интервью с использованием стиля функционального программирования:

var reverseStr = function(str) {
    return (str.length > 0) ? str[str.length - 1] + reverseStr(str.substr(0, str.length -   1)) : '';
};

//tests
console.log(reverseStr('setab retsam')); //master bates
1
задан Bart van Heukelom 7 June 2010 в 23:39
поделиться

2 ответа

Нет, вы не можете называть «T» во время выполнения.

http://java.sun.com/docs/books/tutorial/java/generics/erasure.html

update Но что-то вроде этого добиться аналогичного эффекта

abstract class EventListener<T> {
    private Class<T> type;
    EventListener(Class<T> type) {
        this.type = type;
    }
    Class<T> getType() {
        return type;
    }

    abstract void onEvent(T t);
}

И создать слушателя

EventListener<String> e = new EventListener<String>(String.class) {
    public void onEvent(String event) {
    }
};
e.getType();
2
ответ дан Nikita Rybak 20 August 2018 в 08:28
поделиться
  • 1
    Слишком плохо, идет моя опрятная модель случая – Bart van Heukelom 7 June 2010 в 23:49
  • 2
    Есть еще варианты, это не должно быть уродливо :) – Nikita Rybak 7 June 2010 в 23:55
  • 3
    Я столкнулся с подобными препятствиями, и вы, по крайней мере, сможете превратить новый EventListener & lt; String & gt; (String.class) в новый EventListener (String.class) с использованием вывода типа, чтобы вы только объявляли тип один раз с каждой стороны , – Matt H 8 June 2010 в 00:30
  • 4
    @Matt Кажется, не работает для меня. Он обычно работает для «EventListener (T param)». тип объявления, я думаю, & quot; EventListener (класс & lt; T & gt; param) & quot; выходит за пределы возможностей вывода вывода. – Nikita Rybak 8 June 2010 в 00:37
  • 5
    Хм, я попробовал это сам, и кажется, что ты прав. Сожалею. Я сам получил несколько объявлений типов, используя статический заводский метод, но поскольку вы используете анонимный класс, я не думаю, что это сработает. – Matt H 8 June 2010 в 04:59

Вы не можете сделать это в том подходе, который вы пытаетесь, из-за erasure . Однако, с небольшим изменением дизайна, я считаю, что вы можете достичь того, что вам нужно. Подумайте о добавлении следующего метода в интерфейс EventListener:

public Class<T> getEventClass();

Каждая реализация EventListener должна указать класс событий, с которыми он работает (я предполагаю, что T обозначает тип события). Теперь вы можете вызвать этот метод в методе addEventListener и определить тип во время выполнения.

0
ответ дан Eyal Schneider 20 August 2018 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: