instanceof приводит к непоследовательным результатам для обнаружения интерфейсов?

Вы можете использовать понимание списка:

>>> print([hour.get("saat") for hour in Hours])
['09:00', '09:20', '09:40', '10:00', '10:20', '10:40', '11:00', '11:20', '11:40']

Кроме того, помните, что вы можете изменить hour.get("saat") только на hour["saat"]:

>>> print([hour["saat"] for hour in Hours])
['09:00', '09:20', '09:40', '10:00', '10:20', '10:40', '11:00', '11:20', '11:40']    

Кроме того, не уверены, что вы может понадобиться, но вы можете использовать str.join(iterable) , если вы ищете только одну строку визуализации на консоли:

>>> print(", ".join([hour["saat"] for hour in Hours]))
09:00, 09:20, 09:40, 10:00, 10:20, 10:40, 11:00, 11:20, 11:40

12
задан morgancodes 27 December 2011 в 06:26
поделиться

6 ответов

Вы загружаете какие-либо типы динамично, потенциально от другого classloaders? Единственное время я видел по-видимому непоследовательные результаты, было, когда у меня было две строки кода, которые похожи, они обращаются к тому же типу, но которые на самом деле загрузили тот тип из другого classloaders.

14
ответ дан 2 December 2019 в 03:49
поделиться

instanceof всегда возвраты false для null. Это не компилирует, если это было бы невозможно для статического типа, слева не может быть экземпляр указанного типа. Кроме этого, это должно работать без удивления.

В отличие от C++ (и я верю Smalltalk), объект не может изменить тип во времени выполнения. В C++ тип изменяется во время конструкции, так, чтобы методы нельзя было назвать от конструктора к производному классу [подкласс] методами.

9
ответ дан 2 December 2019 в 03:49
поделиться

Хорошо, проблема решена. Как обычно, проблема была менее странной, чем я думал. Проект я продолжаю работать, находится в неудачном условии наличия некоторых дублирующихся имен классов. Я создавал класс с помощью нечто. MyInterface и тестирующий, например, панели. MyInterface. Спасибо за ответы. Это действительно помогало мне продумать его.

9
ответ дан 2 December 2019 в 03:49
поделиться

Единственный глюк, о котором я знаю, является этим null instanceof никакой тип.

5
ответ дан 2 December 2019 в 03:49
поделиться

Пока у Вас нет classloading проблемы, instanceof работы последовательно. Я предполагаю, что Вы знаете, что instanceof B возвращает true, если A наследован от B или некоторых интерфейсов, реализации или классы A расширяются, instanceof B.

Если Вы получаете ложь, когда Вы ожидаете верный, Вы, вероятно, пытаетесь сравнить экземпляры, прибывающие из другого ClassLoaders.

3
ответ дан 2 December 2019 в 03:49
поделиться

Можно желать "isAssignable" вместо instanceof:

if (MyInterface.isAssignableFrom(myObject.getClass())) {
  //  do work here
}

Это возвратит true для классов, которые реализуют Ваш интерфейс.

-1
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: