有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

克服Java继承限制(意见/建议)

所以我正在为OpenGL/GLEs设计一个框架

我创建了一个“纹理”抽象类。我有从纹理继承的Texture2D和TextureCubemap。从Texture2D我有RenderTexture,从TextureCubemap我有RenderTextureCubemap。现在这一切都很好,但是RenderTexture和RenderTextRecubeMap有很多相似之处。我想删除他们之间目前的冗余。在其他语言中,这将是多重继承的完美场所,但是Java不支持这一点。我的第二个想法是界面。这里的问题是,我无法为接口方法定义实体,因此这对我没有什么好处。另一个选择是创建一个“RenderTarget”类,并将其添加为成员变量,虽然这是可行的,但我不喜欢每次访问“RenderTarget”中包含的内容时都要跳过成员变量,这似乎有点笨拙

我想知道是否有人能提出更优雅的解决方案

编辑:这是根据要求制作的图表。 enter image description here


共 (1) 个答案

  1. # 1 楼答案

    实际上,由于Java8可以在接口中定义方法体,请参见https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html,所以这可能是一个解决方案

    正如注释中所建议的,一个好的解决方案是将冗余代码放在不同的类中,并将其组合到两个呈现程序中(即创建一个拥有此代码的成员变量)

    如果这在这里适用,另一种可能性是将冗余因素考虑到一个helper类中(不可实例化且仅使用静态方法),并从两个渲染器中轮询其静态方法