instanceof, вероятно, будет более дорогостоящим, чем простое равняется в наиболее реальных внедрениях (то есть, те, где instanceof действительно необходим, и Вы не можете только решить его путем переопределения общепринятой методики, как каждый учебник новичка, а также Demian выше предлагают).
, Почему это? Поскольку, что, вероятно, собирается произойти, то, что у Вас есть несколько интерфейсов, которые обеспечивают некоторую функциональность (скажем, x интерфейсов, y и z), и некоторые объекты управлять, который может (или не) реализуют один из тех интерфейсов..., но не непосредственно. Скажите, например, я имею:
w расширяет x
, w
B реализаций А расширяется
, C расширяет B, y
D реализаций расширяет C, z
реализаций предположим, что я обрабатываю экземпляр D, объект d. Вычисления (d instanceof x) требуют для взятия d.getClass (), циклично выполняют через интерфейсы, которые это реализует, чтобы знать, является ли каждый == к x, и если не делают так снова рекурсивно для всех их предков... В нашем случае, если Вы делаете исследование в ширину того дерева, приводит по крайней мере к 8 сравнениям, предполагая y, и z ничего не расширяют...
сложность реального дерева вывода, вероятно, будет выше. В некоторых случаях JIT может оптимизировать большую часть из него далеко, если это может решить заранее d как являющийся, во всех возможных случаях, экземпляре чего-то, что расширяет x. Реалистично, однако, Вы собираетесь пройти тот обход дерева большую часть времени.
, Если бы это становится проблемой, я предложил бы использовать карту обработчика вместо этого, связав реальный класс объекта к закрытию, которое делает обработку. Это удаляет фазу обхода дерева в пользу прямого отображения. Однако остерегайтесь этого при установке обработчика для C.class мой объект d выше не будет распознан.
вот мои 2 цента, я надеюсь, что они помогают...
Прошлой ночью я думал, как это достать самому. Ничего не нашел в Google, но потом я вспомнил, что PHP getimagesize
работает с SWF-фильмами:
<?php
$file = "YOUR_FILE.swf";
$info = getimagesize($file);
$width = $info[0];
$height = $info[1];
print "{$width}x{$height}\n";
?>