[英]Getting declaring class in Java
在Java中有类似的东西:
class A {}
class B {private A a;}
class C {private A a;}
我怎么知道哪个是声明了的类?
即我想获得B类或C类
任何想法表示赞赏。
问候
您不能只使用您指定的结构。 您必须将对B
或C
实例的引用传递到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 B
或class 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.