方法调用将.class作为参数?

时间:2015-08-13 06:26:46

标签: java

我们什么时候应该给方法调用JavaClass.class作为参数?我经常看到类似下面的代码,但我不明白:

String foo(Baar bar) { ... }

foo(Baar.class)

2 个答案:

答案 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引用。