当有人应该在java中使用ClassName.class时

当有人应该在java中使用ClassName.class时,java,Java,我经常看到有人写信 assertThat(Long.valueOf(1), instanceOf(Integer.class)); 但我无法理解为什么以及何时有人应该在java代码中使用ClassName.class(例如Integer.class) 我尝试使用资源,但仍然很难理解它。我对匹配断言的框架不太熟悉,但这似乎就是原因。assertThat测试函数的约定是,它期望参数1为值,参数2为类类型的实例,如果参数1为参数类型2,则返回true,否则返回false 因此ClassName.cl

我经常看到有人写信

assertThat(Long.valueOf(1), instanceOf(Integer.class));
但我无法理解为什么以及何时有人应该在java代码中使用ClassName.class(例如Integer.class)


我尝试使用资源,但仍然很难理解它。

我对匹配断言的框架不太熟悉,但这似乎就是原因。assertThat测试函数的约定是,它期望参数1为值,参数2为类类型的实例,如果参数1为参数类型2,则返回true,否则返回false

因此ClassName.class是实际的类(通过反射我猜是对类名称的引用),instanceOf生成该类的实例,因此instanceOf(ClassName.class)传递该类的实例以检查参数1是否为同一类型

总体动机是测试Long 1的值是原语int的整数包装类的实例这一断言。我假设在示例中返回false


嗯,我认为这是有道理的。

实际上调用
ClassName.class
是很流行的,例如,在获取记录器时,在本例中,方法expect parameter
class clazz
,如下所示

公共静态记录器更多…getLogger(clazz类){
Logger=getLogger(clazz.getName());
...
我们只需使用
ClassName.class
即可发送它

见:

我通常是这样做的

私有静态最终记录器Logger=LoggerFactory.getLogger(ClassName.class)

或其他:

我更喜欢

Logger Logger=LoggerFactory.getLogger(ClassName.class)


这意味着传递的参数实际上是类,而不是类的实例或同名变量。我不知道Intent对象做什么,但它必须以某种方式使用您给定的类,可能是因为java中的反射类型由
java.lang.class
表示。我无法理解该单元测试。aLong不是整数的实例。当您使用Integer.class时,您引用类的实例,它是一个类型化的类对象。您需要时可以使用它。对不起,这就是全部。给出的示例没有多大意义。Java是静态类型的-您在编译时知道所有类型。因此断言它们相当于没有意义我不知道你在做什么。
public static Logger More ...getLogger(Class<?> clazz) {
   Logger logger = getLogger(clazz.getName());
   ...