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`,因为动态类型可以是子类
ClassSampleClass.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)