2015-06-30 3 views
2

Я читаю эффективную java Дж. Блоха, и теперь я нахожусь в объекте объекта функции. Он сказал, что:Знает ли JVM какие указатели функций?

Java не предоставляет указатели на функции, но ссылки на объекты могут быть , используемые для достижения аналогичного эффекта. Вызов метода для объекта обычно выполняет некоторую операцию над этим объектом. Однако можно определить объект, методы которого выполняют операции с другими объектами , переданные явно методам. A n экземпляр класса, который Экспорт точно одного такого метода является фактически указателем на это метод.

Что это значит? Я предполагаю, что каждый раз, когда мы создаем объект такого класса, мы будем эффективно получать указатель на функцию внутри JVM внутри. Но я не уверен в этом, потому что сама Java не знает концепции указателя функции.

Иными словами, есть ли у нас оптимизация, выполняемая компиляторами для таких объектов?

Пример:

public interface Callback{ 
    public void invoke(); 
} 

public class GenericCallback implements Callback{ 
    public void invoke(){ System.out.println("Generic callback"); } 
} 

public static void main(String[] args){ 
    Callback c = new GenericCallback(); //What kind of optimization will 
             //be performed for the c object? 
} 
+0

Возможный дубликат [Function Pointers in Java] (http://stackoverflow.com/questions/1073358/function-pointers-in-java) – Strelok

+0

@Strelok Это не обман. –

ответ

3

Функциональные указатели конструкт уровень языка, что Java не имеет. Поскольку язык или байт-код поддерживают указатели на функции, нет уровня, на котором они были бы релевантными (поскольку собственный код также не имеет понятия о них).

Смежные вопросы