在我的代码中,我(意外地)编写了void.class
( not Void.class
),这是编译器乐意接受的。到现在为止,我认为这些原始人不是真正的对象(不仅void
,还在谈论int
等等......这里),所以他们没有课。
我在谈论所有“原始阶级”。每个基本类型都有一个由<primitivetype>.class
表示的类,例如float.class
Class
”,例如void.class
?int.class.isInstance(2.3f)
吗?答案 0 :(得分:5)
public T smallest() {
// Don't mutate the order of the original array.
ArrayList<T> listCopy = new ArrayList<>(l);
Collections.sort(listCopy);
return listCopy.get(0);
}
是反射中使用的对象,表示方法具有void.class
返回类型。如果您编写void
,则可能会返回此对象。
method.getReturnType();
可以表示参数和返回类型。
您可以撰写int.class
,但它始终会返回int.class.isInstance(...)
,因为参数为false
。
没有Object
对象具有可访问的构造函数。
Class
和int.class.getConstructors()
都返回一个空数组。原始类型没有构造函数。
答案 1 :(得分:2)
Class
的第一个明显问题是它也代表接口:)
在java5之前,Class
用于表示所有java类型,包括基本类型。这是出于方便,它工作正常。
引入泛型之后,java类型变得更加丰富。引入java.lang.reflect.Type
以包括所有类型。不幸的是,它结合了旧的凌乱Class
,造成了更大的混乱。 Type
的层次结构只是没有意义。
现在,void
甚至不是一个类型!所以Class
也包含非类型。正如其他答案所示,这是不方便的。同样,a wildcard is not a type either,还有WildcardType extends Type
!
void
可以在开头设计为一种类型吗?为什么不。它是0
位的原始类型,只有一个值(也就是单位类型)。如果人们写的话,我不确定怎么感觉
void foo(void param){
param = bar(); // void bar(){...}
但至少如果我能写的话我会很高兴
void foo(...){
return bar();
另见John Rose的comment
答案 2 :(得分:0)
Void是Reflection中使用的返回类型void的占位符。
示例: - void.class
是返回void的方法的返回类型,如下面的main
方法: -
import java.lang.reflect.Method;
public class A{
public static void main(String[] args) throws NoSuchMethodException, SecurityException{
Method mh = A.class.getMethod("main",String[].class);
System.out.println(mh.getReturnType() == void.class);
}
}