我经常看到有人写
assertThat(Long.valueOf(1), instanceOf(Integer.class));
但我无法弄清楚,为什么以及何时应该在java代码中使用ClassName.class(示例Integer.class)
我尝试使用https://docs.oracle.com/javase/tutorial/reflect/资源,但仍难以理解。
答案 0 :(得分:1)
实际上调用ClassName.class
很受欢迎,例如在获取记录器时,在这种情况下,方法需要参数Class<?> clazz
,为LoggerFactory
public static Logger More ...getLogger(Class<?> clazz) {
Logger logger = getLogger(clazz.getName());
...
我们只需使用ClassName.class
,
请参阅answers about getLogger by class:
我通常做的是
private static final Logger logger = LoggerFactory.getLogger(ClassName.class);
或其他:
我更喜欢
Logger logger = LoggerFactory.getLogger(ClassName.class);
答案 1 :(得分:0)
我对https://github.com/stanfordnlp/CoreNLP/issues/103#issuecomment-157793500匹配断言的框架并不过分熟悉,但这似乎来自Hamcrest。 assertThat测试函数的契约是它希望参数1是值,参数2是类类型的实例,如果参数类型2是参数类型2,则返回true,否则返回false。
所以ClassName.class是实际的类(通过反射我猜是对类的名称的引用),instanceOf生成该类的实例,因此instanceOf(ClassName.class)传递类的实例以检查参数1是相同的类型。
总体动机是测试断言Long 1的值是原始int的Integer包装类的实例。我猜在示例中会返回false。
嗯,我认为这是有道理的。