@FunctionalInterface
предназначен для проверки выполнения, проверки компиляции и процесса выполнения Java.
javap используется для декомпилирования и сравнения двух интерфейсов, один с @FunctionalInterface
, а другой нет.
Только лишний байтовый код двух строк в интерфейсе с меткой @FunctionalInterface
:
Constant pool:
#7 = ... RuntimeVisibleAnnotations
#8 = ... Ljava/lang/FunctionalInterface;
И оба варианта реализации / лямбда-выражения одинаковы на уровне байтового кода.
За исключением отображения интерфейса:
X.class.getAnnotation(FunctionalInterface.class) == null?;
Вы можете создать простую оболочку вокруг ключей хеш-таблицы, предоставленной моей jshashtable . У меня где-то есть кое-что, что я откопаю позже.
ОБНОВЛЕНИЕ
Я завершил и протестировал реализацию HashSet и загрузил ее в проект jshashtable на GitHub. Вы можете загрузить его или просмотреть исходный код .
var s = new HashSet();
var o1 = {name: "One"}, o2 = {name: "Two"};
s.add(o1);
s.add(o2);
s.values(); // Array containing o1 and o2
Я не думаю, что есть способ работать с хэш-кодом объекта, кроме как сохранить его в самом объекте. Строго говоря, можно создать набор классов без хеширования, используя простой линейный поиск, но это вряд ли будет эффективно.