有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中获取声明类

在Java中有类似的功能:

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

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

也就是说,我想要B级或C级

欢迎提出任何意见

问候


共 (4) 个答案

  1. # 1 楼答案

    在java中,你不能这样做,除非你在类a中有一个对象的引用。。。绝对不是通过编程,也不是在运行时

    但是,如果您只想找出引用类A的类,一个选项是将该类重命名为其他类并尝试编译

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

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

    这是我写的一个示例程序

    导入java。朗,反思一下。场

    导入com。测验甲级

     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
    
  2. # 2 楼答案

    你必须做一些事情,比如:

    class A {
    
        boolean itWasC;
    
        public A( C objectC ) {
            itWasC = true;
        }
    
        public A( B objectB ) {
            itWasC = false;
        }
    }
    

    一旦从class Bclass C创建了类“A”的对象,就将this传递给构造函数。例如:A objectA = new A( this )

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

  3. # 3 楼答案

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

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

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

  4. # 4 楼答案

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