Android - универсальный тип как выражение в ObservableTransformer - PullRequest
4 голосов
/ 08 мая 2019

Я буду использовать наблюдаемый преобразователь в своем приложении для преобразования данных из одного типа в другой, поэтому для этого использования я создал универсальный класс с одним параметром <T1>, где T1 - тип, ожидающий получить вывод

Пример

class Transformer<T1> {

    fun transform(): ObservableTransformer<String, T1> {

        return ObservableTransformer { data ->

            data.map {

                if (T1 is Int) {       //getting compilation error like T1 is not an expression
                    return IntDataType
                }

                if (T1 is Double) { //getting compilation error like T1 is not an expression
                    return DoubleDataType
                }
            }
        }
    }
}

Приведенный выше класс является преобразователем, который получает входные данные в виде строки и преобразует строку в тип someData на основе заданного универсального типа T1
Так что я буду называть выше, как это

 getSomeData()
            .compose(Transformer<Double>().tranform())
            .map{ it: double
            } 

Есть ли какое-либо другое решение для работы как этот тип трансформатора? Любая помощь

1 Ответ

2 голосов
/ 08 мая 2019

Не-оператор T1 is Int не работает, потому что T1 является универсальным типом, а is Int проверяет тип объекта: 1 is Int

Вы можете написать выделенный преобразовательвместо использования дженериков для него.Как правило, вы теряете информацию о типе T1 во время выполнения.

fun Observable<String>.asDouble() = map { it.toDouble() }

getSomeData().asDouble().map { value: Double -> }

Вам даже не нужен реальный преобразователь, поскольку это простое отображение.

...