ziggy42
03/19/2018, 2:40 PMListener<T>
is Listener<User>
?diesieben07
03/19/2018, 2:41 PMziggy42
03/19/2018, 2:41 PMkarelpeeters
03/19/2018, 2:42 PMziggy42
03/19/2018, 2:46 PMfun <T> subscribe(topic: Topic, listener: Listener<T>)
diesieben07
03/19/2018, 2:47 PMinline
and the type parameter reified
, then you can do checks on T::class
.ziggy42
03/19/2018, 2:47 PMAndreas Sinz
03/19/2018, 2:47 PMdiesieben07
03/19/2018, 2:48 PMTopic
should have a <T>
as well.Andreas Sinz
03/19/2018, 2:48 PMKClass
ziggy42
03/19/2018, 2:48 PMAndreas Sinz
03/19/2018, 2:49 PMziggy42
03/19/2018, 2:51 PMdiesieben07
03/19/2018, 2:52 PMTopic
has a type parameter as well, then it will be checked at compile time.ziggy42
03/19/2018, 2:52 PMTopic
is an enum
...diesieben07
03/19/2018, 2:52 PMsealed class
then ๐ziggy42
03/19/2018, 3:02 PM@Suppress("unused")
sealed class TopicWrapper<T>
class UserTopicWrapper : TopicWrapper<User>() {
companion object {
val INSTANCE = UserTopicWrapper()
}
}
...
fun <T> subscribe(topic: TopicWrapper<T>, listener: Listener<T>) {
when (topic) {
is UserTopicWrapper -> {
@Suppress("UNCHECKED_CAST")
userListeners.add(listener as Listener<User>)
}
}
}
Something like this?diesieben07
03/19/2018, 3:03 PMobject UserTopicWrapper : TopicWrapper<User>()
?ziggy42
03/19/2018, 3:04 PMziggy42
03/19/2018, 3:04 PMdiesieben07
03/19/2018, 3:05 PMTopic
instance, then you would save yourself the unchecked cast.diesieben07
03/19/2018, 3:05 PMziggy42
03/19/2018, 3:07 PMTopicWrapper
?ziggy42
03/19/2018, 3:08 PMdiesieben07
03/19/2018, 3:09 PMsealed class TopicWrapper<T> {
abstract fun addListener(listener: Listener<T>, userListeners: MutableList<Listener<User>>, otherListeners: MutableList<Listener<Other>>
}
And then implement that in the respective topic-wrapper object.diesieben07
03/19/2018, 3:10 PMobject UserTopic : TopicWrapper<User> {
override fun addListener(listener: Listener<User>, userListeners: MutableList<Listener<User>>, otherListeners: MutableList<Listener<Other>> {
userListeners += listener
}
diesieben07
03/19/2018, 3:10 PMAndreas Sinz
03/19/2018, 3:11 PMdiesieben07
03/19/2018, 3:11 PMThat suggests otherwise...userListeners.add(listener as Listener<User>)
ziggy42
03/19/2018, 3:12 PMziggy42
03/19/2018, 3:13 PMAndreas Sinz
03/19/2018, 3:13 PMdiesieben07
03/19/2018, 3:13 PMAndreas Sinz
03/19/2018, 3:14 PMziggy42
03/19/2018, 3:15 PM