提问人:Николай Костин 提问时间:8/4/2023 更新时间:8/7/2023 访问量:26
使用上限从原始类型的 java 对象隐式继承 kotlin 对象
Inherit kotlin object from raw-type java object implicitly using upper bound
问:
我有:
class BaseActivity extends Activity { ... }
我想像这样改变它:
class BaseActivity<T extends BaseActivity<T>> { ... }
但我不想更改项目中的所有文件
在 Java 中,我可以:
class HomeActivity extends BaseActivity { ... }
是的,我会收到“原始使用参数化类'BaseActivity'”警告,但是 在 Kotlin 中,我必须显式编写一个类型:
class HomeActivity : BaseActivity<HomeActivity>() { ... }
或者错误将是“类 BaseActivity<T 应有一个类型参数:BaseActivity<*>!>”
有什么选择可以让它工作吗?
答:
0赞
James Lan
8/7/2023
#1
这个技巧是允许超类使用子类的类型。
例如,您可以将字段/方法定义为BaseActivity<T>
List<T> siblings;
void addSibling(T sibling);
然后在扩展的子类中,将有来自超类的类型化成员,HomeActivity
BaseActivity<HomeActivity>
List<HomeActivity> siblings;
void addSibling(HomeActivity sibling);
使用原始类型会导致这些成员的类型丢失。
评论
GenericBaseActivity