Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8中.class的问题转换?_Java_Java 8 - Fatal编程技术网

Java8中.class的问题转换?

Java8中.class的问题转换?,java,java-8,Java,Java 8,我想,类就是它被调用的对象的类。然而,这不符合我试图用一个程序做的事情。我会举一些例子 //o is of type Object //this method throws error "cannot find symbol" for the cast method SampleClass.cast(o); 我以前认为sampleClass.class==sampleClass,是class类型的对象。我还认为SampleClass.class会返回一些真正的元,这很难想象

我想,类就是它被调用的对象的类。然而,这不符合我试图用一个程序做的事情。我会举一些例子

//o is of type Object
//this method throws error "cannot find symbol" for the cast method
SampleClass.cast(o);
我以前认为sampleClass.class==sampleClass,是class类型的对象。我还认为SampleClass.class会返回一些真正的元,这很难想象。现在我知道我什么都不知道。任何有助于解决这一难题的人都将不胜感激:)

编辑:谢谢大家!我很高兴能学习到关于Java的知识。我很感谢你的帮助

我以前认为sampleClass.class==sampleClass,是class类型的对象

你很接近。正确的理解是,
sampleClass.getClass()==sampleClass.class
,类
class
的一个实例


SampleClass
本身是一个类型,而不是一个值。(在Java中,这是一个明显的区别。)

我编写了一些可编译的Java代码,这些代码可能会澄清类和强制转换的一些用法。希望它能够自我记录

您可以将
Sample.class
视为一个“类文字”,就像
中的“某物”
是一个字符串文字一样。它是一个表达式,它有一个值,它可以赋值给一个变量,它是一个对象。此对象的类型为
Class
。另一方面,
Sample
是一种类型,而不是表达式,您不能将其分配给变量

Class
是一个元类,即它是一个描述另一个类的类。你不能超过
Class=Class.Class。有趣的是:还有一些基本类文本,比如
int.class

主类{
公共静态void main(字符串[]args){
//类文字
Class sampleClassLiteral=Sample.Class;
最终样本超对象=新样本();
//动态类
//`?扩展了Sample`,因为动态类型可以是子类

Class
SampleClass.Class
Class
的一个实例。它是
SampleClass
作为对象的表示,而不是说
SampleClass
。类在Java中不是对象。
SampleClass.Class
只返回
Class
,因为它是表示clas的类s对象。@CharlieArmstrong:我想你是想写
sampleClass.getClass().getClass()
将返回
Class
sampleClass.Class.Class
给出编译错误的操作是正确的。旁注:如果你能使用
((sampleClass)o)
,那是最好的(最清晰,可能最有效)是的。当你在处理反射之类的事情,并且不知道对象在编译时实际将具有哪些类型时,其余的更有用。@ruakh facepalm是的,谢谢你。如果没有方法,就不能向实例请求它的类对象。确切地说,
SampleClass.class
class
的一个实例,如果我们不想的话o注意我们的泛型。@Taschi:对。我不确定如何最好地表达它,因为
sampleClass.getClass()
有类型
Class
//sampleClass is an instance of SampleClass
//this method throws error "<identifier> expected"
sampleClass.class.cast(o);
//this method works!
SampleClass.class.cast(o);
//this returns two "<identifier> expected" errors
sampleClass.class.class.cast(o);
//this works too!
((SampleClass) o)