我们什么时候应该给方法调用JavaClass.class作为参数?我经常看到类似下面的代码,但我不明白:
String foo(Baar bar) { ... }
foo(Baar.class)
答案 0 :(得分:1)
当方法期望var app = angular.module('demo', []);
app.controller('MainController', function ($scope) {
$scope.message = "Hi this is great ";
});
作为参数时。
例如,EnumSet.allOf(Class<E> elementType)
期望枚举类(而不是枚举实例)作为参数。因此,假设 QEvent qEvent = QEvent.event;
JPAQuery query = new JPAQuery(entityManager);
return query.from(qEvent)
.where(qEvent.active.eq(true)
.and(qEvent.sensorId.equalsIgnoreCase(sensorId)
.and(qEvent.timestamp.after(rangeStart)
.and(qEvent.timestamp.before(rangeEnd)))))
.groupBy(qEvent.timestamp.dayOfYear())
.list(new QTuple(qEvent.timestamp, Wildcard.count));
是枚举,您可以使用
Class
在您的示例中,您无法将Season
作为参数传递给EnumSet.allOf(Season.class)
,因为Baar.class
期望Baar 实例作为参数。所以你需要的是像
foo()
答案 1 :(得分:0)
在java中,您可以声明方法以期望类型为Class的参数。像
这样的东西String foo(Class<Baar> bar) { ... }
您调用该方法的方式是:
Baar bar = new Baar();
foo(bar.getClass());
或类似
foo(Bar.class);
类型类的参数可以由函数foo()
使用,原因有多种:它可以使用
String foo(Class<Baar> bar) {
Baar barInstance = bar.newInstance();
}
它也可以在if-then-else块中使用它来根据类类型采取特定的操作。
String foo(Class<?> bar) {
if (bar == Baar.class) {
System.out.println("Baar type received.");
}
}
请注意,期望Class对象的函数的方法签名必须明确说明。否则会导致编译时错误;就像你的情况一样。在你的情况下,函数foo需要一个Baar对象。你不能将它传递给Baar.class引用。