比较对象超类包和对象包
Compare Object superclass package with Object package
我正在尝试检查某个对象是否在同一包中具有超级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 }
main的输出如下
--begin--
Object: myPackage.Car@7852e922
objectPackageName: myPackage
Super: myPackage.Vehicle
superPackageName: java.lang
---end---
如您所见,c.getClass()
[Main.16] 采用 class Class
的超级 class,即 java.lang
,相当明显的。我想得到 "myPackage" 作为 superclass。我该怎么做?
你在应该呼叫 c.getPackage()
时却呼叫了 c.getClass().getPackage()
。 c
已经是超类 - 它是一个 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())
我正在尝试检查某个对象是否在同一包中具有超级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 }
main的输出如下
--begin--
Object: myPackage.Car@7852e922
objectPackageName: myPackage
Super: myPackage.Vehicle
superPackageName: java.lang
---end---
如您所见,c.getClass()
[Main.16] 采用 class Class
的超级 class,即 java.lang
,相当明显的。我想得到 "myPackage" 作为 superclass。我该怎么做?
你在应该呼叫 c.getPackage()
时却呼叫了 c.getClass().getPackage()
。 c
已经是超类 - 它是一个 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())