java - 如何防止在 java 接口(interface)中强制转换或创建子特定方法?

标签 java interface casting 3d maintainability

我在保持代码可维护性方面遇到了问题。 在我的问题中,我定义了一个“RenderableShape”,它是 2D 和 3D 形状的父接口(interface)(这两个是接口(interface))。

我有一个渲染器类,它“请求”一个 RenderableShape 来渲染数据。

3D 形状应返回一些数学公式或包裹在其周围的对象,而 2D 形状应返回它所包含的所有 2D 形状(三角形、圆形等)。

显然,'RenderableShape' 不能返回两个渲染器的两种类型。

我可以制作两种不同的方法,但这会迫使所有实现都实现一个无用的方法。

渲染器也可以询问形状是什么类型,但是之后你需要一个转换,这不仅是不必要的,而且在渲染中使用起来也太慢了。

此外,渲染代码本身不应该是形状,因为我想将所有渲染代码放在一个渲染器中,以允许不同的渲染器类型(Z-Buffer、raytracer 等)

解决此问题的可维护且可预测有效的方法是什么?

最佳答案

What would be a maintainable and preverably efficient approach to this problem?

这里应该应用的 OOP 原则之一是告诉,不要问!

将渲染器传递给 RenderableShape 并将其自身绘制到渲染器。

关于java - 如何防止在 java 接口(interface)中强制转换或创建子特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44870615/

相关文章:

java - 是否可以调用 super 接口(interface)的默认方法?

c# - 关于工厂设计架构的问题

c++ - 遗留代码改变了一个 const 指针。有正当理由吗?

java - 将 NSString 转换为字节数组

java - 如何在 java 中将二进制转换为十进制(使用 android studio)

java - 关于java中的jar文件

java - 确认方法签名未被更改的测试?

java - 如何在另一个程序(例如 Eclipse)中使用在 IntelliJ 中创建的 GUI 表单

c# - IFoo foo = new Foo() 和 Foo foo = new Foo() 有什么区别

casting - Swift:CInt 到 Int 的转换?