Эффективность Java "инициализации двойной скобки"?
Одно из свойств этого подхода, на jdk которое до сих пор не указывалось, заключается openjdk в том, что, поскольку вы java-collections-api создаете внутренние классы, весь initialization содержащий класс захватывается java-collections-api в его области видимости. Это jdk означает, что пока ваш Set performance жив, он будет сохранять указатель collection на содержащий его экземпляр initialize (this$0
) и предохранять его от slow сборки мусора, что может javax быть проблемой.
Это, а также performance тот факт, что в первую очередь java создается новый класс, даже slow если обычный HashSet будет efficiency работать нормально (или даже collections лучше), заставляет меня не jdk использовать эту конструкцию javax (хотя я очень хочу синтаксического java сахар).
Второй вопрос: новый speed HashSet должен быть «this», используемым initialize в инициализаторе экземпляра jdk ... может ли кто-нибудь пролить initialisation свет на механизм? Я наивно jdk ожидал, что «this» будет openjdk относиться к объекту, инициализирующему initialisation «ароматы».
Так работают внутренние initialization классы. У них есть собственный performance this
, но у них также есть указатели javax на родительский экземпляр, так jre что вы также можете вызывать efficiency методы для содержащего объекта. В initialize случае конфликта имен внутренний collection класс (в вашем случае HashSet) имеет initialize приоритет, но вы можете добавить slow префикс «this» к имени класса, чтобы speed получить и внешний метод.
public class Test {
public void add(Object o) {
}
public Set makeSet() {
return new HashSet() {
{
add("hello"); // HashSet
Test.this.add("hello"); // outer instance
}
};
}
}
Чтобы slow иметь ясное представление uninitialized о создаваемом анонимном подклассе, вы javax также можете определить там collections методы. Например, переопределить collections HashSet.add()
public Set makeSet() {
return new HashSet() {
{
add("hello"); // not HashSet anymore ...
}
@Override
boolean add(String s){
}
};
}
java
performance
collections
initialization
Эффективность Java "инициализации двойной скобки"?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.