Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вернуть в функции класс а не объект / 9 сообщений из 9, страница 1 из 1
04.09.2014, 10:30
    #38737175
zamatay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
Доброго дня всем.
Подскажите есть такая задача грубо говоря статический класс у него предположим одно поле
Код: java
1.
2.
public static class Base {
public static String TableName}


от него есть наследники типа
Код: java
1.
2.
3.
4.
5.
public static final class disposals extends Base implements BaseColumns  {
static{
TableName = "disposals";
}
}


ну и такой еще
Код: java
1.
2.
3.
4.
5.
public static final class disposalsComments extends Base implements BaseColumns  {
static{
TableName = "disposalsComments";
}
}


так вот задача написать функцию которая бы возвращала не объект а сам класс, что то типа
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    public static Base getContractByUri(Uri uri) {
        switch (sUriMatcher.match(uri)) {
            case Contract.disposals.ID:
                return disposals();
            case Contract.disposal_comment.ID:
                return disposal_comment();
            case Contract.ID_STAFF:
                return staff();
            default: return null;
        }
    }


Прошу сильно не пинать только начал изучать java. Помимо TableName там еще куча всяких полей, где в коде в зависимости от uri нужно получать сам класс.
Код: java
1.
getContractByUri(uri).TableName
...
Рейтинг: 0 / 0
04.09.2014, 10:39
    #38737185
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
zamatayПрошу сильно не пинать
Да кому это нужно...

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static Class<?> getContractByUri(Uri uri) {
        switch (sUriMatcher.match(uri)) {
            case Contract.disposals.ID:
                return disposals.class;
            case Contract.disposal_comment.ID:
                return disposal_comment.class;
            case Contract.ID_STAFF:
                return staff.class;
            default: return null;
        }
    }
...
Рейтинг: 0 / 0
04.09.2014, 10:49
    #38737193
zamatay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
Спасибо, что откликнулись, но только не понятно как этим дальше пользоваться так как при вызове
Код: java
1.
2.
Contract.Base path =  Contract.getContractByUri(getUri());
String tn = path.TableName;


на первой строчке вылезает ошибка
Error:(123, 55) error: incompatible types: Class<CAP#1> cannot be converted to Base
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
...
Рейтинг: 0 / 0
04.09.2014, 10:59
    #38737206
zamatay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
И еще немного не по теме вопрос, если можно в двух словах или ткнуть ссылкой.
почему нельзя вот так написать
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    public static Class<Base> getContractByUri(Uri uri) {
        switch (sUriMatcher.match(uri)) {
            case Contract.disposals.ID:
                return disposals.class;
            case Contract.disposal_comment.ID:
                return disposal_comment.class;
            case Contract.ID_STAFF:
                return staff.class;
            default: return null;
        }
    }


что бы он сразу знал, что возвращаться будет класс наследованный от Base
...
Рейтинг: 0 / 0
04.09.2014, 11:10
    #38737224
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
zamatayСпасибо, что откликнулись, но только не понятно как этим дальше пользоваться так как при вызове
Это в раздел по яве.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public static void test() {
        Field tableName = null;
        Class<?> cls = getContractByUri(someUri);
        try {
            tableName = cls.getField("TableName");
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }



Переезжаем...

Модератор: Тема перенесена из форума "Android".
...
Рейтинг: 0 / 0
04.09.2014, 11:15
    #38737230
zamatay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
Ну да как то не очень красиво получается, проще уж тогда наверное создавать объекты и обращаться спокойно ко всем их полям и методам.
...
Рейтинг: 0 / 0
04.09.2014, 11:47
    #38737274
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
zamatayпроще уж тогда наверное создавать объекты и обращаться спокойно ко всем их полям и методам
Что помешало сразу избрать этот путь?
...
Рейтинг: 0 / 0
04.09.2014, 12:26
    #38737335
zamatay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
Да просто не эстетично как то, класс статический, хотелось бы получать сам класс, а не создавать все время объекты
...
Рейтинг: 0 / 0
04.09.2014, 13:44
    #38737503
ferc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вернуть в функции класс а не объект
zamatay,

так обращайся к статическим методам как следует

Код: java
1.
SomeClazz.someMethod
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вернуть в функции класс а не объект / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]