【问题标题】:Compare Object superclass package with Object package比较 Object 超类包和 Object 包
【发布时间】:2015-03-29 19:39:51
【问题描述】:

我正在尝试检查一个对象是否在同一个包中具有超类。

我做了下面的例子

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 类的超类,即 java.lang,这很明显。我想将“myPackage”作为超类。我该怎么做?

【问题讨论】:

    标签: java inheritance package superclass


    【解决方案1】:

    你打电话给c.getClass().getPackage(),而你应该打电话给c.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())
    

    【讨论】:

    • 非常感谢您的快速回答。你的建议是正确的:) 我也可以做b = (objectPackage = superPackage); 进行比较,因为它是同一个类,还是这些存储为 2 个单独的对象?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2019-05-28
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多