juan_gandhi: (Default)
[personal profile] juan_gandhi

enum Color {
  RED(0xff0000),
  GREEN(0x00ff00),
  BLUE(0x0000ff),
  WHITE(0xffffff);
  int code; 

  Color(int code) {
    this.code = code;
  }

  public int getCode() {
    return code;
  }
}

//... (many files away)
Set<Color> myPalette = newHashSet(RED, WHITE, BLUE);

//... (many lines/files away)
if (myPalette.contains(0xff0000)) {
  System.out.println("0xff0000 is our color!");
}

Date: 2008-04-29 04:38 am (UTC)
From: [identity profile] skavish.livejournal.com
в смысле что у enum'ов нельзя hashCode() & equals() переопределить?
ну да, нельзя, хотя должен сказать что приведенный код не лучше. использовать энумы для цвета как минимум довольно странно. слишком много значений, все тяжело будет перечислить :)

Date: 2008-04-29 10:03 am (UTC)
From: [identity profile] faceted-jacinth.livejournal.com
Эээ... Присоеднияюсь к недоумению предыдущего оратора. В шарпе энум -- это интегральный тип, 32битный по дефолту, с отслеживанием присваиваний некорректного типа (чисто по названию) и возможностью завести некоторое количество констант. И ничего более.

То есть
enum A { One = 1, Two = 1 };
...
Console.WriteLine(A.One == A.Two);
пишет True и это правильно.

Или в жаве какие-то дополнительные штуки обещают, но не всегда доставляют?

Date: 2008-04-29 11:37 am (UTC)
From: [identity profile] v-i-y.livejournal.com
В джаве, значение enum'а это полноценный объект, похожим на интегральный тип его делает наличие метода int ordinal().

Незадача заключается в том, что ordinal() всегда возвращает порядковый номер (начиная с 0) енум-значения внутри енума и изменить это никак нельзя!

Date: 2008-04-29 11:29 am (UTC)
From: [identity profile] v-i-y.livejournal.com
хм. спасибо, познавательно.
мысль была интересная :)

ps. только вместо HashSet лучше EnumSet, нет?

Date: 2008-04-29 11:40 am (UTC)
From: [identity profile] v-i-y.livejournal.com
Меня недавно позабавило то, что можно сделать так, что енум-значения будут принадлежать разным фактическим классам.

Пример:
public enum Test {

    X1,
    X2,
    X3 {
      void _do() {}
    };

    public static void main(String[] args) {
        System.out.println(X1.getClass().equals(X2.getClass()));
        System.out.println(X1.getClass().equals(X3.getClass()));
    }
}


output:
true
false

Date: 2008-04-30 04:52 am (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Это вообще прикольно, конечно. Но, в принципе, это должно быть пофиг.

Date: 2008-04-30 08:32 am (UTC)
From: [identity profile] v-i-y.livejournal.com
Конечно пофиг в большинстве случаев, но у нас был довольно универсальный код, отдающий по енум-зачению строку из ресурс-бандла. Он искал ресур по ключу: enumClassName+'.'+enumValueName и понятное дело не находил для X3, пока мы не поняли что классы разные.

Date: 2008-04-30 02:57 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
По-моему, это ещё один недостаток.

Date: 2008-04-29 06:11 pm (UTC)
From: [identity profile] ivan-gandhi.livejournal.com
Граждане, главный-т цимес не в этом. А в том, что компайлер должен был бы ругаться, мол, какой идиот проверяет присутсвие целого в множестве, где члены должны быть Цветами? Но увы. Set.contains(Object)...

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

July 2025

S M T W T F S
  12345
6789 1011 12
131415 1617 1819
20212223242526
2728 2930 31  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 1st, 2025 06:24 am
Powered by Dreamwidth Studios