clazz和Class<;之间有什么区别&燃气轮机;java中的clazz?
我需要在java中使用反射。我知道clazz和Class<;之间有什么区别&燃气轮机;java中的clazz?,java,reflection,ternary-operator,Java,Reflection,Ternary Operator,我需要在java中使用反射。我知道Class clazz创建了一个表示Class对象的变量。但是,我尝试使用forName(“aClassName”)方法从字符串中引用类对象。我的IDE(Eclipse)似乎更喜欢用classclazz来声明变量。我在其他地方见过很多次这种符号。这是什么意思 编辑:删除了对三元运算符的引用,因为它与此问题无关。类是一个原始类型-它基本上是一个泛型类型,您将其视为完全不了解泛型 Class是一个使用未绑定通配符的泛型类型-它基本上意味着“Class对于某些类型Fo
Class clazz
创建了一个表示Class
对象的变量。但是,我尝试使用forName(“aClassName”)
方法从字符串中引用类
对象。我的IDE(Eclipse)似乎更喜欢用classclazz
来声明变量。我在其他地方见过很多次这种符号。这是什么意思
编辑:删除了对三元运算符的引用,因为它与此问题无关。类是一个原始类型-它基本上是一个泛型类型,您将其视为完全不了解泛型
Class
是一个使用未绑定通配符的泛型类型-它基本上意味着“Class
对于某些类型Foo
,但我不知道是什么”
类似地,可以使用带边界的通配符:
Class在泛型类型中,通配符?
表示“任何类”(因此Class
与Class
相同,但作为原始类型正确参数化)。首先要认识的是,在这种情况下,“?”不是三元运算符,但是它是Java泛型实现的一部分,并且指出类的类型是未指定的,正如其他一些答案已经解释的那样
为了澄清关于三元算子的问题,它实际上非常简单
假设您有以下if语句:
boolean correct = true;
String message;
if (correct) {
message = "You are correct.";
} else {
message = "You are wrong.";
}
您可以使用三元运算符重写它(将其视为if-else快捷运算符):
但是,为了提高代码的可读性,除了最简单的语句外,最好避免使用三元运算符。这与三元运算符有什么关系?这里没有运算符。在这个上下文中,它不是三元运算符,而是一个未绑定的通配符。但是,从技术上讲,原始类型和未绑定的通配符之间并没有任何区别,是吗?我的意思是,除了避免编译器警告和可能增加代码可读性之外。@Gothmog:由于处理原始类型的方式(IIRC),有时它会影响重写和重载。谢谢Jon,非常感谢!我明白了,我的印象是,?
总是被称为三元运算符。我现在明白这是不正确的。三元运算符是常用的,还是这是一个在过去更流行的特性?我想说,它仍然在使用,但通常是避免的。我仍然时不时地在代码中看到它,所以知道如何阅读它是件好事。很少有情况下,更简洁的陈述会让事情变得更清楚。这是我唯一一次考虑使用它的时候。
message = (correct) ? "You are correct." : "You are wrong.";