当有人应该在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 parameterclass 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());
...