【发布时间】:2014-08-20 14:23:47
【问题描述】:
假设我正在使用具有以下方法的 Java 库
public static SomeInterface foo();
接口SomeInterface 有多个实现,其中一些是库包中的protected。其中一种实现是TheProtectedClass
检查foo() 返回的对象是否是TheProtectedClass 的实例的最佳方法是什么?
我目前的计划是创建一个 Utils 类,它存在于我的项目中,但与受保护的类在同一个包中。这个 Utils 可以引用TheProtectedClass,因为它在同一个包中,因此它可以检查对象是否为instanceof TheProtectedClass。
还有其他想法吗?
编辑:有些人在问“为什么”,所以这里有更多上下文。
我正在使用jOOQ,在我的代码的某些部分,我想知道我拥有的Field 实例是否是Lower 的实例。
目前,我使用 field.getName().equals("lower"),但这并不像我希望的那样强大。
我意识到,由于Lower 是一个受保护的类,它不是 API 的一部分,它可以更改,但我可以接受。
【问题讨论】:
-
你可以通过反射来做到这一点,但你为什么要这样做呢?
-
多个实现,其中一些是受保护的你是什么意思。一个类具有
public或default可见性。 -
当然,最好的方法是避免首先检查
instanceof? -
当实例的任何超类或超接口为
protected、private或包私有时,它是否受到保护? -
了解用例背后的基本原理会很有趣。也许您真正想做的事情可以使用 jOOQ API 以其他方式实现?
标签: java protected instanceof jooq