Почему Jython не обеспечивает требования к интерфейсу интерфейса Java - PullRequest
0 голосов
/ 11 марта 2020

В Java я привык к ошибкам компилятора, когда не удается реализовать все необходимые методы интерфейса. Я был удивлен, когда сделал объект в Jython, который не реализовал все необходимые методы (getRowCount, getColumnCount, getValueAt) javax.Swing.AbstractTableModel, который реализует интерфейс TableModel. Из Javadocs AbstractTableModel :

Чтобы создать конкретную TableModel в качестве подкласса AbstractTableModel, вам нужно только предоставить реализации для следующих трех методов:

Класс Jython, который должен потерпеть неудачу:

class ResourceTableModel(AbstractTableModel):
    COLUMN_NAMES = ('path','filename','parametername', 'parametervalue')
    def __init__(self, *rows):
        self.data = list(rows)
    def getRowCount(self):
        return len(self.data)
    def getColumnCount(self):
        return len(self.COLUMN_NAMES)

Тестирование выше:

 def test_column_count(self):
        e = mySwingGUI.ResourceTableModel()
        column_count = e.getColumnCount()
        self.assertEqual(column_count,4)

Затем я прочитал, что вы можете использовать isinstance (), чтобы увидеть, является ли объект экземпляром указанного объекта. c interface.

, поэтому я попробовал это:

 def test_column_count(self):
        e = mySwingGUI.ResourceTableModel()
        if isinstance(e,javax.swing.table.AbstractTableModel):
            print("true")
        else:
            print("false")
        column_count = e.getColumnCount()
        self.assertEqual(column_count,4)

, но он печатает true, хотя я не реализовал все методы. Есть ли способ заставить Jython реализовывать контракты интерфейса или это только с помощью компилятора Java?

...