Как я могу спорить с Duck-типизацией в строго типизированном языке, таком как Java? - PullRequest
6 голосов
/ 31 марта 2009

Я работаю в команде программистов на Java. Один из моих коллег время от времени предлагает мне сделать что-то вроде «просто добавить поле типа» (обычно «строковый тип»). Или код будет загружен "if (foo instanceof Foo){...} else if( foo instanceof Bar){...}".

Несмотря на замечание Джоша Блоха, что "помеченные классы являются имитацией правильной иерархии классов", каков мой однострочный ответ на подобные вещи? И как мне разработать концепцию более серьезно?

Мне ясно, что - контекст Java - рассматриваемый тип объекта находится прямо перед нашими коллективными лицами - IOW: слово сразу после "class", "enum" или "interface" и т. Д.

Но кроме того, что трудно продемонстрировать или количественно определить (на месте) «это усложняет ваш код», как я могу сказать, что «типизация утки в (более или менее) языке со строгой типизацией является глупая идея, которая предполагает гораздо более глубокую патологию проектирования?

Ответы [ 11 ]

0 голосов
/ 31 марта 2009

Два аргумента для ответа на названный вопрос:

1) Предполагается, что Java будет «писать один раз, запускать где угодно», поэтому код, написанный для одной иерархии, не должен вызывать исключения RuntimeException, когда мы где-то меняем среду. (Конечно, есть исключения - каламбур - из этого правила.)

2) Java JIT выполняет очень агрессивные оптимизации, основанные на знании того, что данный символ должен быть только одного типа и только одного типа. Единственный способ обойти это - сыграть.

Как уже упоминали другие, ваш "экземпляр" не совпадает с вопросом, на который я здесь ответил. Что-либо с любыми типами, утка или статика, может иметь проблему, которую вы описали. Есть лучшие способы ООП справиться с этим.

...