【发布时间】:2020-04-27 15:33:09
【问题描述】:
我正在创建一个像这样的通用抽象类:
abstract class BaseDialogFragment<T: Parcelable> : DialogFragment()
试图将这个类实现为
class MyDialogFragment : BaseDialogFragment<String>()
给我
Type argument is not within its bounds Expected: Parcelable Found: String
BaseDialogFragment<String>() 中的字符串。
那么,如何使用String 作为T 的值?如果我希望 T 成为可包裹类型,我的条件 T: Parcelable 是否有问题?
【问题讨论】:
-
恐怕你能做到。但是,您可以尝试在编译时允许每个类型,然后在运行时(在 init 块内)您可以尝试使用速记内联函数(如require)来验证这些内容。编辑:在运行时有类型擦除。抱歉,您无法检查泛型参数的类型。 :(
-
不幸的是,我的
T稍后被用作使用@Parcelize进行 Parcelable / parcelized 的类的泛型类型参数。在无条件使用T时,出现错误。 -
Type is not directly supported by 'Parcelize'. Annotate the parameter type with '@RawValue' if you want it to be serialized using 'writeValue()' -
是的,很遗憾你不能这样做。
标签: android generics kotlin parcelable