Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> уточнить тип 
V
    Опции темы
Fieral
Дата 11.6.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



есть 

Код

public class MyC<E>{


 void do(){

     if(E extends A){
           do1();
      }else{
           do2();
      }


 }

}


что нудно написать вместо extends чтобы было правильно?
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Старовъръ
Дата 11.6.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 4
Всего: 10



instanceof. Но это сработает только для объектов. Тебе, наверное, нужно E.class.equals(A.class);

Это сообщение отредактировал(а) Старовъръ - 11.6.2009, 18:58
PM MAIL WWW   Вверх
math64
Дата 11.6.2009, 19:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



На этапе выплнения информация о типе будет стёрта и E = Object. Но если в кострукторе объекта передать объект типа E и запомнить его в переменной E e, то можно так:
Код

public class MyC<E>{
  private E e;
  public MyC(E e) { this.e = e; }
  public doSomething() {
     if (e instanceof A) {
        doSomethingWithA();
     }
  }
}

PM   Вверх
MisterCleric
Дата 12.6.2009, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 5
Всего: 38



можно еще так
Код

public class MyClass<T> {
    private Class<T> myClassType;

    public MyClass() {
        this.myClassType = (Class<T>)
                ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0];
    }

    public T f() {
        if (myClassType.equals(MyClass2.class)) {
            ....
        } else {

         }

    }
}




--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
ivg
Дата 12.6.2009, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(MisterCleric @  12.6.2009,  11:24 Найти цитируемый пост)
можно еще так

Нельзя
Код

    public static void main(String[] args) {
        new MyClass<String>().f();
    }

PM MAIL   Вверх
MisterCleric
Дата 12.6.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 5
Всего: 38



Цитата

Нельзя

А, сорри, виноват. Должно быть так
 
Код

public abstract class A<T> {
    private Class<T> myClassType;

    public A() {
        this.myClassType = (Class<T>)
                ((ParameterizedType) getClass().getGenericSuperclass())
                        .getActualTypeArguments()[0];
    }

    public void f() {
        if (myClassType.equals(String.class)) {
            System.out.println("I'm String");
        } else {
           System.out.println("Other type");
        }
    }
}

Код

public class B extends A<String>{
}

Код

 public static void main(String[] args) {
       new B().f();
    }


Ну, наверное, это не по теме будет...
Хотя действительно, зачем делать проверку на подобие
Цитата

 if(E extends A){
           do1();
      }else{
           do2();
      }


Если лучше понаписывать наследников конкретного типа и реализовать их специфическую логику в методе 
Цитата

void do(){...}

Это исходит из рефакторинга предложенного Мартином Фаулером: замена условных выражений иерархией. 


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
ivg
Дата 12.6.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(MisterCleric @  12.6.2009,  12:36 Найти цитируемый пост)
А, сорри, виноват. Должно быть так

Код

public class B<T> extends A<T>{
}

Код

    public static void main(String[] args) {
        new B<String>().f();
    }

PM MAIL   Вверх
kBepTu
Дата 13.6.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 6.12.2007

Репутация: нет
Всего: 2



промахнулся  smile 
P.S. просьба удалить пост

Это сообщение отредактировал(а) kBepTu - 13.6.2009, 13:29
PM   Вверх
Fieral
Дата 15.6.2009, 11:52 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



короч надо переделать всё
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.