1

在Java中有类似的东西:

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

我怎么知道哪个是声明 a 的类?

即我想获得B级或C级

任何想法表示赞赏。

问候

4

5 回答 5

5

你不能只使用你指定的结构。您必须将引用传递给BCA构造函数的实例,然后编写一些逻辑来确定传入的类型。

于 2013-03-08T11:19:47.247 回答
2

据我了解,您需要在代码中找到 A 类的所有用法(类型用法)(如果我错了,请纠正我)。

它取决于您的 IDE 和已安装的代码检查插件,大多数 IDE 都提供这样的功能,例如在 Eclipse 中,您可以右键单击一个类并选择“References->Project”

如果你的 IDE 没有这个,有很多 Java 工具,看看:A tool like ReSharper, but for Java?

于 2013-03-08T11:26:09.180 回答
2

您必须执行以下操作:

class A {

    boolean itWasC;

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

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

class B一旦您从构造函数创建或class C传递this给构造函数的“A”类对象。例如: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

你不能在java中做到这一点,除非你有A类中的对象的引用......绝对不是通过编程方式或运行时。

但是,如果您只想找出引用 Class A 的类,一种选择是将类重命名为其他名称并尝试编译。

瞧,编译器会列出所有引用类 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 回答