2012-04-23 57 views
9

是否可以使用部分限定名称引用Java类型?如果是这样,怎么样?具有部分限定名称空间的引用类型

场景:我经常发现自己需要一个需要视图的数据类(例如Activity)。我的标准做法是命名此类,它的工作原理是,但这个视图类总是以tld.organization.project.views命名空间结尾,其中“视图”后缀完全是多余的。

我想删除“查看”后缀(因此类型将是tld.organization.project.Activitytld.organization.project.views.Activity),但这意味着我必须使用命名空间来限定类型,当我在同一个类中引用它们时。使用名称空间来限定类型引用本身并不是一件坏事,但重复这两种类型的完全限定名称都是重复的,难以阅读。

引用一个部分限定的类型(像~.Activity~.views.Activity)将移除多余的内容。某种类型的别名会回答,但似乎Java不支持这种功能。有没有其他的选择?

+0

除了'import tld.organization.project.views。*'? – 2012-04-23 03:18:26

+0

我不认为在这种情况下导入类型是有帮助的,因为类型的短名称是相同的。我会更新这个问题来澄清这一点。 – cqcallaw 2012-04-23 03:23:00

+0

他们被称为“包名称”而不是名称空间。 – 2012-04-23 03:32:20

回答

4

不,你不能用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.其实,我可能会试着先拍你。

+0

Upvote for frank postscripts。 ;)但是,我很难看到所提出结构的设计问题。这是MVC设计模式的一个相当简单的应用程序。我认为分离问题(在这种情况下是数据模型和数据视图)几乎被普遍认为是好的设计实践... – cqcallaw 2012-04-23 03:54:22

+2

分离有很多种口味。鉴于对“MVC”的解释范围,我不想假设我知道你的意思是“数据”与“视图”类,但是我在你的包名中看到一个我从未同意过的练习的指示器:基于他们居住的应用程序的“层”来打包类。即,具有UserDao,AccountDao,...的“dao”包,以及具有UserView,AccountView的“查看”包...我的坚定意见它更容易理解,并且不太容易产生包装纠结,而是拥有一个“用户”和“账户”包装,而每个包装都包含相关的类别。 – 2012-04-23 04:11:27

+0

有趣。我可以看到你喜欢的方法的优点,但我不确定它是否解决了我原来的问题:任何时候两个功能单元交互(比如说“用户”DAO需要与“账号”DAO交互),我们都有相同的不合格名称的问题。此外,看起来似乎喜欢你想要相当确定没有新的“层”可能是需要的,因为为每个新的“层”包添加一个新的类将是相当费力。 – cqcallaw 2012-04-23 04:59:02

-1

你们是不是说你不想写:

tld.organization.project.views.ActivityView 
每次使用时间

使用import

如。

class ImportTest { 
    public static void main(String[] args) { 
     javax.swing.JOptionPane.showMessageDialog(null, "Hi"); 
     System.exit(0); 
    } 
} 

导入类在开始的时候是这样的::使用类JOptionPane的全名是这样,而不是

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。

+0

他想*部分*限定名称,即'views.Activity'而不是'Activity'或'tld.blablabla.views.Activity'.' – sepp2k 2012-04-23 03:24:25

+0

是的,抱歉,我的问题并不清楚。我已经更新了它。 – cqcallaw 2012-04-23 03:25:55

+0

因为'JOptionPane'是一个类,所以它的工作原理是能够做一些与包类似的东西。 – Daniel 2015-09-02 09:20:35

相关问题