1

Javaのようなものを持っている:

class A {}
class B {private A a;}
class C {private A a;}

を宣言したクラスがどれであるかをどうやって知ることができますか?

つまり、クラスBまたはクラスCを取得したい

どんなアイデアでも大歓迎です。

よろしく

4

5 に答える 5

5

指定した構造だけではできませんでした。Bまたはのインスタンスへの参照を渡してから、C渡さAれた型を決定するロジックを記述する必要があります。

于 2013-03-08T11:19:47.247 に答える
2

質問を理解しているので、コード内のクラス A (タイプの使用法) のすべての使用法を見つける必要があります (間違っている場合は修正してください)。

IDE とコード インスペクション用にインストールされているプラ​​グインに依存します。ほとんどの IDE はそのような機能を提供します。たとえば、Eclipse では、クラスを右クリックして [参照] -> [プロジェクト] を選択できます。

IDE にこれがない場合は、Java 用のツールがたくさんあります。次を参照してください

于 2013-03-08T11:26:09.180 に答える
2

次のようなことをしなければなりません:

class A {

    boolean itWasC;

    public A( C objectC ) {
        itWasC = true;
    }

    public A( B objectB ) {
        itWasC = false;
    }
}

そして、コンストラクターからクラス「A」のオブジェクトを作成するclass Bか、コンストラクターにclass C渡します。this例:A objectA = new A( this )

それは奇妙で、オブジェクトをインスタンス化せずに行うことはできません

于 2013-03-08T11:26:10.577 に答える
1
class A {
    public void print(){
        String className = new Exception().getStackTrace()[1].getClassName();
        System.out.println(className);
    }
}
class A1 {
    private A a;
    public A1(){
        a= new A();
        a.print();
    }
}
class A2 {
    private A a;
    public A2(){
        a= new A();
        a.print();
    }
}
public class C {
    public static void main(String[] args) {
        A1 a1= new A1();
        A2 a2 = new A2();
    }
}
于 2013-03-08T11:38:27.657 に答える
0

クラスAのオブジェクトの参照がない限り、Javaでそれを行うことはできません...間違いなく、プログラムでも実行時でもありません。

ただし、 Class A を参照しているクラスを見つけたいだけの場合、1 つのオプションは、クラスの名前を別の名前に変更してコンパイルを試みることです。

そして出来上がり、コンパイラは Class A を参照するすべてのクラスをリストしますが、型に解決することはできません。

別の方法として、リフレクションを使用してクラス内の変数を見つけ、変数の型がクラス A 型であるかどうかを比較することもできます。

これを行うために私が書いたサンプルプログラムを次に示します

java.lang.reflect.Field をインポートします。

com.test.ClassA をインポートします。

 package com.test;
    public class ClassA {

   }



    public class ClassB {

        private ClassA classA;

        public static void main(String[] args) throws Exception,
                NoSuchFieldException {

            Field classVariable = ClassB.class
                    .getDeclaredField("classA");

            classVariable.setAccessible(true);

            System.out.println(classVariable.getType());

            System.out.println(ClassA.class);

            if (ClassA.class.equals(classVariable.getType())) {
                System.out.println("Class A is referenced");
            }

        }
    }

結果

class com.test.ClassA
class com.test.ClassA
Class A is referenced
于 2013-03-08T11:28:25.590 に答える