2015-11-05 3 views
0
private Schema<Message<K, V>> messageSchema = RuntimeSchema.getSchema(Message.class); 

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

Ранее я сделал попытку с помощью:

private final Class<K, V> type; 

public MessageClass(Class<K, V> type) { 
    this.type = type; 
} 

public Class<K, V> getMyType() { 
    return this.type; 
} 

Однако упал на его лицо из-за класс принимает только один параметр.

+0

Если это была вещь, это будет «Класс >». – zapl

ответ

1

При разработке интерфейсов API, которые принимают определение классов, один, как правило, имеет два варианта:

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

  2. Объявление Type параметров и динамически считываемых аргументов типа. Пользователи такого рода libaries будут использовать идиому, известную как type token, для передачи аргумента Type в библиотеку. Демо-код

RuntimeSchema.getSchema(new MyTypeToken<Message<String, Integer>>(){{}}); 

Обратите внимание, что new MyTypeToken<Message<String,Integer>>(){{}} является анонимным типом, который хранит информацию о параметрах типа, которые в противном случае будет удален компилятором и не доступны во время выполнения.

Смежные вопросы