繁体   English   中英

在Java中声明类

[英]Getting declaring class in Java

在Java中有类似的东西:

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

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

即我想获得B类或C类

任何想法表示赞赏。

问候

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

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

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

如果您的IDE不具备此功能,则有很多Java工具,请看一下: 像ReSharper这样的工具,但是对于Java?

您必须做一些事情,例如:

class A {

    boolean itWasC;

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

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

一旦你创建类“A”的对象class Bclass C通过this来构造。 例如: A objectA = new A( this )

这很奇怪, 没有实例化就无法做到

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();
    }
}

除非您在A类中没有对象的引用,否则您无法在Java中做到这一点……绝对不能通过编程或运行时的方式。

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

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

另一种替代方法是使用Reflections查找类中的变量,并比较变量的类型是否为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM