14

部分的に修飾された名前でJavaタイプを参照することは可能ですか?もしそうなら、どのように?

シナリオ:ビューを必要とするデータクラス(例)を頻繁に使用Activityします。私の標準的な慣習では、このクラスに名前を付けることActivityViewで機能しますが、このビュークラスは常にtld.organization.project.views名前空間になり、「View」サフィックスは完全に冗長になります。

「View」サフィックスを削除したいのですが(タイプはとになりますtld.organization.project.Activitytld.organization.project.views.Activity、これは、同じクラスでタイプを参照するときに、名前空間を使用してタイプを修飾する必要があることを意味します。名前空間を使用して型参照を修飾すること自体は悪いことではありませんが、どちらかの型の完全修飾名を繰り返すことは繰り返しであり、読みにくいです。

部分的に修飾された型(~.Activityまたはのようなもの)を参照~.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 に答える