Подтвердить что ты не робот

Как работает свойство .class?

Впервые развивается на 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. Итак, что делает класс?

4b9b3361

Ответ 1

На самом деле это мало. NewTourney.class - это скорее специфический для языка способ записи "объекта, который является классом NewTourney". Это сокращение позволяет ссылаться на класс a NewTourney, а не на конкретные уже существующие экземпляры NewTourney.

В вашем конкретном случае мне было бы опасно предположить, что Activity в конечном итоге создает экземпляр класса для обработки действия или, по крайней мере, для хранения данных, чувствительных к действию.

Ответ 2

Экземпляры класса Класс представляют классы и интерфейсы в запущенном приложении Java. Это часть java Reflection API. Из Oracle tutorial:

Если тип доступен, но нет экземпляра, тогда можно получить класс, добавив ".class" к названию типа. Это также самый простой способ получить класс для примитивного типа.

Вот несколько ссылок:

Ответ 3

Класс - это класс, представляющий классы.:)

Это не "объект". Это не суперкласс или даже ваша иерархия "NewTourny". Вот почему вы не можете отбрасывать из NewTourney в класс.

Свойство .class - это экземпляр класса, представляющего информацию о типе.

Вы можете использовать его для создания рефлексивных вызовов стиля для создания экземпляра того, что вы не знаете о типе во время компиляции.

Ответ 4

Чтобы избавиться от предупреждения, вы можете изменить Class c на Class<? extends Tourny>. Это означает, что c не является объектом, представляющим один из всех возможных классов, но более конкретно представляет класс, полученный с помощью Tourny.

Ответ 5

Метод .class - это все объекты, которые позволяют вам ссылаться на исходный характер этого объекта, прежде чем у вас даже была возможность его инициализировать. Это не родитель, это оригинальный неподдельный шаблон сам по себе. Он называется ".class", потому что это прямое представление класса, на которое может влиять только определение класса. Это избавляет вас от необходимости создавать новый объект для получения информации, которую все члены этого класса изначально имеют вместе.