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