Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Jython不强制执行Java接口的接口要求_Java_Python_Jython - Fatal编程技术网

为什么Jython不强制执行Java接口的接口要求

为什么Jython不强制执行Java接口的接口要求,java,python,jython,Java,Python,Jython,在Java中,我习惯于在未能实现接口所需的所有方法时出现编译器错误。当我在Jython中创建一个对象时,我感到惊讶,该对象没有实现javax.Swing.AbstractTableModel(实现接口TableModel)的所有必需方法(getRowCount、getColumnCount、getValueAt)。从: 要将具体的TableModel创建为AbstractTableModel的子类,只需提供以下三种方法的实现: 应失败的Jython类: class ResourceTableMo

在Java中,我习惯于在未能实现接口所需的所有方法时出现编译器错误。当我在Jython中创建一个对象时,我感到惊讶,该对象没有实现javax.Swing.AbstractTableModel(实现接口TableModel)的所有必需方法(getRowCount、getColumnCount、getValueAt)。从:

要将具体的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()查看对象是否是特定接口的实例

所以我试了一下:

 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)

尽管我还没有实现所有的方法,但它仍然是真的。有没有办法让Jython强制执行接口契约,或者这只由Java编译器强制执行?

AbstractTableModel不是接口。感谢您指出Stultuske。我想我可能不得不改变我问题的措辞。不过,AbstractTableModel实现了TableModel,我的代码不符合文档中对AbstractTableModel的要求:“要创建一个具体的TableModel作为AbstractTableModel的子类,您只需要提供以下三种方法的实现”当我在java中尝试类似的代码时,我得到了编译器错误:TimTableModel.java:3:error:TimTableModel不是抽象的,并且不重写TableMode公共类TimTableModel extensed AbstractTableModel中的抽象方法getValueAt(int,int){