在Java中声明类

时间:2013-03-08 11:17:20

标签: java class

有类似Java的东西:

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

我怎么知道哪个类声明了?

即。我想得到B班或C班

任何想法都表示赞赏。

问候

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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

如果您的IDE没有这个,那么有很多java工具,请查看:A tool like ReSharper, but for Java?

答案 2 :(得分:2)

你必须这样做:

class A {

    boolean itWasC;

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

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

class Bclass C传递this到构造函数后,创建“A”类的对象。例如:A objectA = new A( this )

这很奇怪,而且如果没有实例化对象,你就无法做到这一点

答案 3 :(得分: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();
    }
}

答案 4 :(得分:0)

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

但是如果你只是想找出引用A类的类,可以选择将类重命名为其他类并尝试编译。

而且,Voila,编译器会列出引用类A的所有类,但无法解析为类型。

另一种选择是使用Reflections to find out the Variables in a Class并比较变量的类型是否属于A类

下面是我写的一个示例程序

import java.lang.reflect.Field;

import 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