This question already has answers here:
Are Java classes objects?
(4个答案)
在8个月前关闭。
考虑最简单的示例。我们有
public class Foo {}
因此我们可以说
Foo.class // ==> class Foo
因此,有理由认为Foo
应该是java.lang.Class
,因为我们显然可以访问它并且可以在当前上下文中对其进行操作。然而
Foo instanceof java.lang.Class
引发错误
cannot find symbol
symbol: variable Foo
Foo instanceof java.lang.Class
^-^
但是,这与instanceof本身无关。只是
Foo
仅在OpenJDK Shell中会产生相同的错误。
如果Foo
在当前上下文中不存在,我们如何访问Foo
上的属性?
java大神给出的解决方案
类名可能在您的源代码中用作许多不同表达式的一部分。这并不意味着类名本身就是一个对象;它只是意味着名称本身可以用作较大表达式的一部分。这些不是“属性”或属性。它们是用于形成具有许多不同部分的表达式的其他语法构造。
JLS定义了“ TypeName”的方式,例如Foo
可在第15章中用于形成表达式。具体来说:
Section 15.8.2, Class Literals。
TypeName {[]}。 class
Section 15.8.4, Qualified this,以访问词法包围的类。
TypeName。 this
Section 15.11, Field Access Expressions,以超级类的形式访问词法包围的类。
TypeName。 super
。识别码
Section 15.12, Method Invocation Expressions,以调用静态方法。
TypeName。 [TypeArguments]标识符([ArgumentList])
TypeName。 super
。 [TypeArguments]标识符([ArgumentList])
Section 15.13, Method Reference Expressions,指的是稍后可能会调用的封闭类的方法。
TypeName。 super
:: [TypeArguments]标识符
它也可能是符合其他表达式的“引用类型”,例如:
Section 15.16, Cast Expressions,以创建强制转换表达式。
(ReferenceType {AdditionalBound})UnaryExpressionNotPlusMinus
Section 15.20.2, Type Comparison Operator instanceof
,使用instanceof
。
RelationalExpression instanceof
ReferenceType
类型名称有特定用途,例如上述的Foo
。这并不意味着类型名称通常可以用作其自己的对象。类型名称仅允许作为较大表达式的一部分使用,否则这些表达式可能是不相关的。
This question already has answers here: Double value returns 0 [duplicate] (3个答案) 6年前关闭。 我正在尝试将华氏度转换为摄氏温度。现在当我使用此错误时:double fahrenheit=input.nextDouble(); double celsius= ( **5** /…
使用-source 8或更高版本来启用lambda表达式[重复] - javaThis question already has answers here: Specifying java version in maven - differences between properties and compiler plugin (3个答案) 去年关闭。 当我尝试运行Maven构建时遇到构建错误。我创建了一个包含lambda函数的简单J…
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
Java-如何将此字符串转换为日期? - java我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…
从方法返回数组-Java - javaprivate static Coordinate[] getCircleCoordintaes() { Coordinate coordinates[] = {new Coordinate(0, 0)}; return coordinates; } 以上程序工作正常。在上面的程序中,返回的坐标数组首先初始化了数组使用这条线Coordinate coordi…