14

是否可以使用部分限定名称来引用 Java 类型?如果是这样,怎么做?

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

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

引用一个部分限定的类型(类似~.Activityor ~.views.Activity)将删除该垃圾。某种类型的别名会回答,但似乎 Java 不支持这样的功能。有没有其他选择?

4

2 回答 2

8

不,你不能用 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();
}

我建议您遇到的名称问题可能指向需要解决的设计问题。

PS如果我不得不从事一个组织课程的项目,我可能不得不自己开枪。

PPS 实际上,我可能会先向你开枪。

于 2012-04-23T03:39:50.010 回答
-2

你是不是想说你不想写:

tld.organization.project.views.ActivityView

每次使用ActivityView

使用导入

例如。而不是像这样使用类的完全限定名称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。

于 2012-04-23T03:20:47.873 回答