“.class”属性如何工作?

2022-09-01 21:08:03

第一次用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做什么呢?


答案 1

它实际上并没有多大作用。 更像是一种语言特定的写法“对象即类”。此速记允许引用 a 的类,而不是处理 已经存在的特定实例。NewTourney.classNewTourneyNewTourneyNewTourney

在您的特定情况下,我冒昧地猜测最终会创建的实例来处理操作,或者至少保存操作的上下文相关数据。Activity


答案 2

类是表示类的类。:)

它不是“对象”。它不是一个超类,甚至不是你的“NewTourny”层次结构。这就是为什么你不能从NewTourney到一个班级。

.class 属性是表示类型信息的 Class 的实例。

您可以使用它来执行反射样式调用,以实例化您在编译时不知道的类型。