将我的c++代码转换为Java:转换多重继承
Converting my C++ code to Java: Translating multiple inheritance
第一天使用Java。非常基本的问题:我有三个基类,由许多类相乘继承。每个基类都有大量的实现和很少的抽象方法:
class Consumer { /* lots of stuff */ };
class Producer { /* lots of stuff */ };
class Logger { /* lots of stuff */ };
class A : public Consumer, Producer, Logger {}
...
class Z : public Consumer, Producer, Logger {}
现在我知道我可以把三个基类中的两个变成接口,多重继承这两个接口并扩展一个类。不充分是因为在这些基类中的所有实现都没有意义将其复制到许多子类中。
我正在读一些关于委托或作文的东西,我不知道如何在这里应用。基本上,我的思维过程是由我的c++经验形成的。将我的c++类结构转换为Java的阻力最小的路径是什么?
如果需要,我可以填写更多的基类,但希望不是必需的。
将c++类结构转换为Java的阻力最小的路径是什么?
拿出纸和笔,重新思考你的问题,做一个更接近Java工作方式的设计。
没有神奇的规则可以将任何有多重继承的问题转换成没有多重继承的问题。在这种情况下,您可能希望通过创建多个相互引用的类来分离关注点,而在c++中只有一个…但是这取决于您正在处理的具体问题,您将如何构建类和接口的层次结构以及所产生的不同类实例如何相互关联。
你有两个选择:
为Consumer, Producer和Logger创建3个接口,并使类A和Z实现它们。当然,您必须为每个类提供一个实现。如果实现是相同的,则创建一个更泛型的类(它可能是抽象的,您可能不需要实例化它)实现3个接口,然后创建类a和Z扩展抽象类。
正如你在你的帖子中所说的,似乎这个解决方案不适合你的需要,所以使用委托代替,在类A和Z放3个新的字段(作为实例变量)的消费者,生产者和记录器类型(你可以在构造函数中实例化它们),然后放的方法是消费者,生产者和记录器方法的包装。
相关文章:
- SWIG Java 在使用 -DSWIGWORDSIZE64 时将int64_t转换为 jlong
- 我需要帮助将我的代码从 c++ 转换为 java
- 将C++映射转换为 Java 映射
- 使用 jni 将返回带有模板的对象的 Java 代码转换为 c++
- C++ (U256)*(H256 const*)(char*[] + int) 将重写转换为 Java
- JNA 将 HICON 转换为 Java Image
- 从c++到java的矢量转换
- 如何将通过TCP发送数据的数据从C++转换为Java
- 如何将 Java double[][] 转换为 C++ <vector<vector>> JNI?
- 如何通过 JNI 将 java CharSequence 转换为 c++ char*
- 将 Java LinkedHashMap 转换为 C++ std::map
- 将本机C 代码转换为Java
- 在使用 JNI 将 c++ unordered_map转换为 java hashMap之前将其转换为 java hash
- 将 C++ 中的字符值转换为具有与 Java 中相同值的字符串
- 如何将 GLCM 的实现转换为 Java C++
- 将 C++ 中的结构转换为 Java 中的类
- 将 Java ArrayList 转换为 C++ 向量时出现问题
- FlatBuffers C++从缓冲区转换为对象,仅适用于root_type(而Java具有所有)
- 将 JNI -> jobject(基本上是 java 文件中的映射和/或映射的映射)转换为 std::map(c++)
- 使用正确的数据类型转换java中的c++方法逻辑