Android Studio 3.1中IntelliJ类型转换感知链式补全功能无法使用求助
关于Android Studio 3.1中「Chain completion aware of type casts」功能的使用示例与原理说明
我刚好用过这个IntelliJ带来的新特性,给你拆解下它的作用和具体示例,你就能快速上手啦~
功能原理
这个特性的核心是让IDE智能识别链式调用中的类型转换操作,后续补全时自动基于转换后的类型提供建议。简单来说:当你把一个父类对象强转为子类后,后续链式调用的补全列表会直接显示子类的方法/属性,不用你再手动重复强转或者额外声明类型,极大提升了代码编写效率。
代码示例
先定义两个测试类:
class Animal {} class Dog extends Animal { // 子类独有方法 public void bark() { System.out.println("Woof!"); } // 返回子类对象的方法 public Dog getPuppy() { return new Dog(); } } // 一个返回父类类型的方法 public static Animal getRandomAnimal() { return new Dog(); // 实际返回Dog实例 }
没有该特性时的痛点
以前要调用子类方法,你要么拆分变量,要么重复强转:
// 方式1:拆分变量,额外声明类型 Dog dog = (Dog) getRandomAnimal(); dog.getPuppy().bark(); // 方式2:重复强转(繁琐且易出错) ((Dog) ((Dog) getRandomAnimal()).getPuppy()).bark();
开启特性后的便捷操作
有了「Chain completion aware of type casts」后,你只需一次强转,后续链式调用的补全会自动适配子类类型:
- 输入强转后的链式调用开头:
((Dog) getRandomAnimal()). - 按下
.,IDE会直接显示Dog类的所有方法(比如getPuppy()); - 选择
getPuppy()后继续按下.,IDE会自动提示Dog类的bark()方法——因为它已经记住了前面的强转操作,知道整个链式调用的上下文是Dog类型; - 最终写出简洁的代码:
((Dog) getRandomAnimal()).getPuppy().bark();
注意事项
要确保这个功能正常工作,你需要先在Android Studio中开启链式补全:
打开Settings > Editor > General > Code Completion,勾选「Chain completion」选项,保存设置后重启IDE即可生效。
内容的提问来源于stack exchange,提问作者Quentin Beuvelet
相关产品推荐
相关产品推荐

