如何做一个”的.class'物业工作?(How does a '.class'

2019-06-23 12:18发布

第一次使用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作为图尔尼(这是所有这些类的父类)?

长的问题:

目前这处理所有按钮导航在我的应用程序,并能正常工作。 然而,正如你所看到的,我已经压制了“rawtype”的警告,这是当我投C作为类。 现在,我真的想不警告代码,所以我想“哦,这些类是孩子的图尔尼”,所以我认为这是可行的,铸件C作为图尔尼 - 但是,这并不工作。 这时我才意识到,我真的不知道什么码“NewTourny.class”实际上没有,那可能是线索,为什么我不能投C作为图尔尼。 那么,是什么的.class办?

Answer 1:

它并没有真正多。 NewTourney.class更多的是写“它是类的对象语言特定的方式NewTourney ”。 这速记允许一个参考类的 NewTourney ,而不是处理具体的已经存在的情况下NewTourney

在特定情况下,我大胆猜测,该Activity最终创建的实例来处理动作,或者至少保持动作的上下文敏感数据。



Answer 2:

该类的实例,其中表示正在运行的Java应用程序的类和接口。 这是Java反射API的一部分。 从Oracle 教程 :

如果类型是可用的,但没有实例,然后就可以通过附加的“.class”的类型的名称来获取类。 这也是以获得类为基本类型的最简单的方法。

下面是一些参考:

  1. https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
  2. https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html


Answer 3:

类是代表类的类。 :)

这不是“对象”。 它不是一个超类,甚至在你的“NewTourny”层次。 这就是为什么你不能从NewTourney转换为类。

所述的.class属性是类的实例,它表示类型信息。

你可以用它做反光样式要求来实例化的东西,你不知道在编译时的类型。



Answer 4:

为了摆脱的警告,你可以改变Class cClass<? extends Tourny> Class<? extends Tourny> 。 这意味着c不是一个对象,它表示所有可能的类别中的一个,但更具体地表示由派生的类Tourny



Answer 5:

该方法的.class是所有OBJETS有,让你可以从之前,你甚至有机会初始化引用对象的原始本性。 这不是家长,它本身的原始纯粹的模板。 这就是所谓的“.class”,因为它是唯一的类定义可以影响类的直接表示。 这样可以节省你不必做一个新的对象,以获得该类别的所有成员本来有共同的信息。



文章来源: How does a '.class' property work?