Java类名与包名冲突:如何指定访问目标lion类?
问题描述
有以下代码示例:
package animal; public class lion { } package zoo; public class animal { public class lion { } }
当使用animal.lion cub = new animal.lion()声明并实例化对象时,Android Studio会将其识别为zoo包下animal类中的lion内部类,但实际想要访问的是animal包下的lion类。在不能修改包名或类名的前提下,该如何实现?
补充说明:清楚Java命名规范,但当前场景不允许修改类名和包名,它们均为小写单单词形式。
解决方案
在不能修改包名和类名的前提下,你可以通过以下两种方法解决这个冲突:
方法一:移除对
zoo.animal的import语句
如果代码中不需要直接用animal指代zoo.animal类,删除对应的import语句即可。此时编译器会将animal识别为包名,原代码animal.lion cub = new animal.lion()就能正确指向animal包下的lion类。方法二:用全限定类名引用冲突类
如果必须使用zoo.animal类,不要import它,而是在所有需要用到它的地方直接写全限定类名zoo.animal,同时保持animal作为包名的解析优先级。示例代码:public class Test { public static void main(String[] args) { // 正确实例化animal包下的lion类 animal.lion cub = new animal.lion(); // 使用全限定类名引用zoo包下的animal类及其内部类 zoo.animal zooAnimal = new zoo.animal(); zoo.animal.lion zooLion = zooAnimal.new lion(); } }
这样就能明确区分两个不同的lion类,避免编译器的错误解析。
内容的提问来源于stack exchange,提问作者Hai Hack
相关产品推荐
相关产品推荐

