如何对比作为对象传递的类类型与方法所在类的类类型?
如何对比传入对象的类类型与类中已有实例的类型?
嘿,我来帮你搞定这个类型判断的需求!先把你给出的代码整理清楚,然后给你两种常用的实现方案:
你的现有代码场景
调用侧代码:
TechToday techToday = new TechToday(); SoftwareRevolution softwareRevolution = new SoftwareRevolution(); Subscriber s1 = new Subscriber(); s1.Subscribe(techToday); s1.Subscribe(softwareRevolution);
Subscriber类的初始代码:
class Subscriber { TechToday tt = new TechToday(); SoftwareRevolution sr = new SoftwareRevolution(); public void Subscribe(Object obj) { // 这里需要判断传入的obj类型和tt、sr的类型是否一致 } }
方案1:用getClass()精确匹配类型(严格匹配,子类不生效)
如果你需要完全匹配同一个类(比如传入的对象不能是TechToday的子类),可以用getClass()方法获取对象的运行时类,再用==对比Class对象:
class Subscriber { TechToday tt = new TechToday(); SoftwareRevolution sr = new SoftwareRevolution(); public void Subscribe(Object obj) { // 对比传入对象与tt的类是否完全一致 if (obj.getClass() == tt.getClass()) { System.out.println("传入的是TechToday类型"); } // 对比传入对象与sr的类是否完全一致 else if (obj.getClass() == sr.getClass()) { System.out.println("传入的是SoftwareRevolution类型"); } else { System.out.println("未知类型"); } } }
小贴士:其实你也可以直接对比类字面量,比如obj.getClass() == TechToday.class,这样不用依赖类里的tt实例,更简洁。
方案2:用instanceof匹配类或其子类
如果你需要兼容子类场景(比如传入TechToday的子类实例也能匹配),就用instanceof关键字:
class Subscriber { public void Subscribe(Object obj) { if (obj instanceof TechToday) { System.out.println("传入的是TechToday或它的子类"); } else if (obj instanceof SoftwareRevolution) { System.out.println("传入的是SoftwareRevolution或它的子类"); } else { System.out.println("未知类型"); } } }
这种方式会检查对象是否是指定类(或其子类)的实例,灵活性更高。
内容的提问来源于stack exchange,提问作者Cleaven
相关产品推荐
相关产品推荐

