我正在尝试检查一个对象是否在同一包中具有父类(super class)。
我做了下面的例子
Vehicle.java
package myPackage;
public class Vehicle {
public Vehicle(){}
}
Car.java
package myPackage;
public class Car extends Vehicle{
public Car(){
super();
}
}
Main.java
1 package myPackage;
2
3 public class Main {
4
5 public static void main(String[] args){
6 Vehicle v = new Car();
7 hasSuperInSamePackage(v);
8 }
9
10 public static boolean hasSuperInSamePackage(Object o) {
11 boolean b = false;
12 if ((o.getClass().getSuperclass()) != null) {
13
14 Class c = o.getClass().getSuperclass();
15 Package objectPackage = o.getClass().getPackage();
16 Package superPackage = c.getClass().getPackage();
17 System.out.println("--begin--");
18 System.out.println("Object: " + o.toString());
19 System.out.println("objectPackageName: " + objectPackage.getName());
20 System.out.println("Super: " + c.toString());
21 System.out.println("superPackageName: " + superPackage.getName());
22 System.out.println("---end---");
23
24 b = (superPackage.getName().equals(objectPackage.getName()));
25 }
26 return b;
27 }
28 }
主程序的输出如下
--begin--
Object: myPackage.Car@7852e922
objectPackageName: myPackage
Super: myPackage.Vehicle
superPackageName: java.lang
---end---
如您所见,c.getClass()
[Main.16] 采用类 Class
的父类(super class),即 java.lang
这是非常明显的。我想将“myPackage”作为父类(super class)。我该怎么做?
最佳答案
当您应该调用c.getPackage()
时,您却调用了c.getClass().getPackage()
。 c
已经是父类(super class) - 它是一个 Class
,因此在其上调用 getClass()
只会给你 Class.class
,这不是您想要的。
我会尽量保持一致,如下所示:
Class objectClass = o.getClass();
Class superClass = thisClass.getSuperclass();
Package objectPackage = objectClass.getPackage();
Package superPackage = superClass.getPackage();
System.out.println("--begin--");
System.out.println("Object: " + objectClass);
System.out.println("objectPackageName: " + objectPackage.getName());
System.out.println("Super: " + superClass);
System.out.println("superPackageName: " + superPackage.getName())
关于java - 比较 Object 父类(super class)包和 Object 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234036/