这个问题的标题听起来像一个不错的思想实验,但是很遗憾并不是这样。让我们假设以下代码结构:
class Outer {
private static class Inner implements SomeInterface {
...
}
public static SomeInterface returnInner() {
return new Inner();
}
}
有没有一种好的、干净的方法来执行以下检查:
SomeInterface a = A.returnInner();
if (a instanceof Outer.Inner)
throw new Error("Ooops, something bad happened");
你以为这不是一个真实的例子吗?查看
Arrays
类和方法asList(T ...)
,它返回自己的List<T>
实现, 这恰好是一个private static class ArrayList<T>
(这和通常的ArrayList
没有关系 - 感谢Sun和Oracle,没有你们我该如何是好)。我需要检查传递给我的方法是否不是这个包装器类的实例,因为它没有实现add()
方法(它使用AbstractList
的实现 - 它抛出一个UnsupportedOperationException
)。
add
操作的列表,比如Collections.unmodifiableList
或Guava的ImmutableList
,或者其他什么东西。 - user2357112