Лучший подход для встраивания SWF в страницу HTML должен использовать SWFObject.
Это - простая библиотека JavaScript с открытым исходным кодом, которая является простым в использовании и благоприятным для стандартов методом для встраивания содержания Flash.
Это также предлагает обнаружение версии Flash player. Если пользователь не будет иметь версии Flash требуемой или отключит JavaScript, они будут видеть альтернативное содержание. Можно также пользоваться этой библиотекой для инициирования обновления Flash player. Как только пользователь обновил, они будут перенаправлены назад к странице.
пример из документации:
SWFObject dynamic embed - step 3
Alternative content
А хороший инструмент для использования наряду с этим является HTML SWFObject и генератором JavaScript . Это в основном генерирует HTML и JavaScript, необходимо встроить Flash с помощью SWFObject. Идет с очень простым UI для Вас для ввода параметров.
Это настоятельно рекомендовано и очень просто использовать.
Если вы должны управлять классом вне вашего контроля, я бы предложил использовать делегирование. Вот моя попытка:
RichList
вокруг List
, реализующих контракт List
, на основе шаблона декоратора . EqualityChecker
с помощью одного метода public boolean equal (T t1, T, t2). EqualityChecker
это сделает за вас тест на равенство. Таким образом, вы можете добавить обе операции ко всем существующим List
s для любого типа объекта, для которого вы написали EqualityChecker
.
Дальнейшие улучшения: Вы можете также напишите default EqualityChecker
, который просто вызывает метод равенства сравниваемых объектов. Затем вы можете перегрузить обе новые операции, чтобы по умолчанию EqualityChecker
.
If your lists contain no duplicates (with repsect to the hypothetical custom comparator classes) you can use two TreeSets instead, instantiated with your two comparators respectively.
A drawback of this (apart from the duplication constraint) is that the order you get when iterating over elements depend on the comparators.
Учитывая ваши особые требования к равенству, List # removeAll ()
и List # keepAll ()
не соответствуют вашим потребностям, поэтому я думаю, что вы потребуется специальная реализация, чтобы сделать что-то похожее на обе операции.
Не существует решения, которое подчинялось бы контракту List, и ни одна из существующих реализаций list не позволяет вам предоставить компаратор. Контракт List определяет поведение списка с точки зрения метода каждого элемента equals (Object)
.
Предложение использовать TreeSets с разными компараторами также является нарушением контракта, если компаратор Метод compare
несовместим с методом equals (Object)
каждого элемента.
На практике вам может потребоваться реализовать свои собственные классы списков. Вы можете сделать его реализацией List, которая не строго следует контракту List, но вы должны быть осторожны, чтобы не нарушить работу других библиотечных методов / классов.
Если вы не хотите самостоятельно программировать операции набора и , вы не против тратить ресурсы ЦП и памяти, вы можете:
WrappedPojo
s на основе ваших GenericPojo
s WrappedPojo
equals ()
WrappedPojo
для выполнения операции с GenericPojo
обратно в их исходные контейнеры (при необходимости) после завершения операции. Уродливо, но просто.
Обе операции, которые вы пытаетесь выполнить, являются функциональными, хотя Java не поддерживает их очень хорошо, и вы, вероятно, будете писать их совсем по-другому. Возможно, вам придется переосмыслить то, чего вы пытаетесь достичь, чтобы соответствовать java.
То, что вы делаете, - это выполнение операции над проекцией типа данных (т. Е. Для поднабора полей)
Операции, которые вы делаете также используются операции Set, а не операции List. например, вы не можете пересечь два списка (или, по крайней мере, вы должны определить, что это означает). Удаление также может работать не так, как вы ожидаете, и для списка.
Представьте, что у вас есть метод, который возвращает коллекцию pojos только с указанные вами поля. В прошлом я написал библиотеку, чтобы сделать это эффективно с помощью динамически генерируемого класса, взгляните на функциональную Java или что-то подобное.
public static <Pojo, Pojo2> Set<Pojo2> project(Collection<Pojo> collection,
String... fieldsToRetain);
List1 - List2 (где классы GenericPojo равны, если равны только идентификаторы)
Set<PojoWithId> setOfIds = project(list1, "id")
setOfIds.retainAll(project(list2, "id"));
Intersect списка List1 и List2 (где id, адрес, город, страна, но не extraDetails GenericPojo равны)
Set<PojoWithThreeFields> intersection = project(list1, "id", "address", "city", "country");
intersection.retainAll(project(list2, "id", "address", "city", "country"));
Вы можете сохранить все это в объектах домена, используя следующий подход:
equals (
... )
на ] GenericPojo
основан только на id
. WrappedPojo
как оболочку вокруг GenericPojo
с равным (
.. . )
на основе дополнительных полей GenericPojo
. Я предполагаю, что основная проблема заключается в том, чтобы единый предметный класс с разными определениями равенства.