是否可以引用具有部分限定名称的Java类型?如果是这样,怎么样?
场景:我经常发现自己需要一个需要视图的数据类(例如Activity
)。我的标准做法是将此类命名为ActivityView
,但这个视图类总是以tld.organization.project.views
命名空间结束,其中“视图”后缀完全是多余的。
我想删除“查看”后缀(因此类型将是tld.organization.project.Activity
和tld.organization.project.views.Activity
),但这意味着我必须使用命名空间来限定类型,当我在同班。使用命名空间来限定类型引用本身并不是一件坏事,但重复任何一种类型的完全限定名称都是重复且难以阅读的。
引用部分限定类型(类似~.Activity
或~.views.Activity
)会删除该错误。某种类型的别名会回答,但似乎Java不支持这种功能。还有其他选择吗?
答案 0 :(得分:7)
不,你不能用Java中的包来做到这一点。您可以获得的最接近的是将事物组织成类的嵌套层次结构而不是包。在那个和战略静态导入之间,你可以获得预期的效果,尽管这将是一个非常混乱的解决方案。例如:
package tld.organization.project;
public class Activity {}
和
package tld.organization.project;
public class Views {
public static class Activity {}
}
然后可以称为:
public void whatever() {
Activity a = new Activity();
Views.Activity a2 = new Views.Activity();
}
我建议您使用姓名时遇到的问题可能指向需要整理的设计问题。
P.S。如果我不得不参与一个组织课程的项目,我可能不得不自己开枪。
P.P.S。实际上,我可能会先尝试射击你。
答案 1 :(得分:-1)
你想说你不想写:
tld.organization.project.views.ActivityView
每次使用ActivityView
?
使用import
例如。而不是像这样使用类JOptionPane
的完全限定名称:
class ImportTest {
public static void main(String[] args) {
javax.swing.JOptionPane.showMessageDialog(null, "Hi");
System.exit(0);
}
}
在开头导入类,如下所示:
import javax.swing.JOptionPane; // Make a single class visible.
class ImportTest {
public static void main(String[] args) {
JOptionPane.showMessageDialog(null, "Hi");
System.exit(0);
}
}
现在您可以在班级中直接使用JOptionPane。