2013-08-13 4 views
0

Как определить общий тип с помощью строки? Например, если бы я хотел написатьОпределение общих типов со строкой

def createMap(foo: String, bar: String) = { 
    Map[foo, bar]() 
} 

val myMap = createMap("String", "Int") 

Как я мог преобразовать foo и bar в правильные типы? Об этом я мало что вижу в документации.

+0

Вся совокупность генериков должна быть безопасной по типу во время компиляции. Ты пытаешься победить это. – SLaks

+1

И что бы вы ожидали, что будет тип возврата 'createMap'? –

+0

Вы можете использовать макросы для этого (я приведу вам пример, если вам это нужно), но знайте, что строки тогда ** должны быть литералами, чтобы они работали. Просьба описать ваш вариант использования, мы могли бы дать вам другое решение. – gzm0

ответ

2
  1. Посмотрите:

    def createMap[foo, bar] = { 
        Map[foo, bar]() 
    } 
    
    val myMap = createMap[`String`, `Int`] 
    

    Не то похожи на нужный код?

  2. Если вы действительно хотите создать карту во время выполнения с типами, неизвестными во время компиляции, вы можете просто использовать Map[Any, Any]() + тип приведения. Я не думаю, что можно добиться безопасности типа с помощью идентификаторов типа строки. (Чтобы получить класс для проверки времени выполнения см. another question)

  3. Кажется, что можно использовать macros. Однако я не эксперт, чтобы обеспечить реализацию.

+0

+1 только для замены материала в примере. Особенно обратные тики. – gzm0

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