有类似Java的东西:
class A {}
class B {private A a;}
class C {private A a;}
我怎么知道哪个类声明了?
即。我想得到B班或C班
任何想法都表示赞赏。
问候
答案 0 :(得分:5)
你不能只使用你指定的结构。您必须将对B
或C
的实例的引用传递给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 B
或class 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