首次使用Java进行开发,并首次针对Android进行开发,因此这是一个相当新的问题。
我目前有这段代码:
public void onBtnClicked(View v){
/** Handles button navigation */
@SuppressWarnings("rawtypes")
Class c;
int viewId = v.getId();
switch (viewId) {
case R.id.btnNewTourny :
c = NewTourny.class;
break;
case R.id.btnTeamEditor :
c = EditTeam.class;
break;
case R.id.btnCatEditor :
c = EditCat.class;
break;
case R.id.btnLoadTourny :
c = EditCat.class;
break;
case R.id.btnNewCategory :
c = NewCat.class;
break;
default :
c = Main.class;
}
Intent myIntent = new Intent(v.getContext(), c);
startActivityForResult(myIntent, 0);
}
简短问题:
.class 属性做什么,f.ex。在' c = NewTourny .class '?
为什么我不能将c转换为Tourny(这是所有这些类的父级)?
长问题:
这当前处理我的应用程序中的所有按钮导航,并且工作正常。但是,正如您所看到的,我已经抑制了一个'rawtype'警告,当我将c作为一个类转换时。 现在,我真的想要一个没有警告的代码,所以我想'好吧,所有这些类都是'Tourny'的孩子,所以我认为它会起作用,把c作为Tourny - 但这不起作用。然后我意识到,我真的不知道代码“NewTourny.class”实际上做了什么,这可能是为什么我不能把c作为Tourny的线索。那么,.class做什么?
答案 0 :(得分:11)
它实际上并没有做。 NewTourney.class
更像是一种语言特定的方式来编写“NewTourney
类的对象”。这个简写允许人们引用类 a NewTourney
,而不是处理NewTourney
的特定已存在的实例。
在您的具体情况下,我会猜测Activity
最终会创建类的实例来处理操作,或者至少保存操作的上下文敏感数据。
答案 1 :(得分:3)
类的实例,其中 Class 表示正在运行的Java应用程序中的类和接口。这是java Reflection API的一部分。来自Oracle tutorial:
如果类型可用但没有实例,则可以通过附加" .class"来获得类。到类型的名称。这也是获取基本类型Class的最简单方法。
以下是一些参考资料:
答案 2 :(得分:2)
Class是一个表示类的类。 :)
它不是"对象"。它不是超类,甚至不是你的" NewTourny"层次结构。这就是为什么你不能从NewTourney演绎到一个班级。
.class属性是Class的一个实例,表示类型信息。
您可以使用它来执行反射样式调用,以实例化您在编译时不知道的类型。
答案 3 :(得分:1)
要删除警告,您可以使用Class c
更改Class<? extends Tourny>
。这意味着c不是一个对象,它代表所有可能的类之一,但更具体地表示由Tourny
派生的类。
答案 4 :(得分:1)
.class方法是所有objets都允许您在有机会初始化之前引用该对象的原始性质。它不是父母,它本身就是原始的纯粹模板。它被称为&#34; .class&#34;因为它只是类定义可以影响的类的直接表示。它使您不必创建新对象,以获取该类最初具有共同点的所有成员的信息。