当前位置: 首页 > 知识库问答 >
问题:

不同Java类型之间的转换器

邹华皓
2023-03-14

我试图在java中实现不同类型之间的转换器:我有一个超级类foo,有2个子类: fo1和fo2,我也有2个不相关的其他类bar1和bar2,我试图实现一个转换器从bar1到fo1和bar2to fo2(与之相反)。

因为我在这里有继承,所以我想应该创建一个泛型类型的接口(将是bar1或bar2),它将定义转换所需的函数,我还想让转换器成为bar1和bar2的通用转换器,我认为它应该以某种方式使用接口实现。如果您有更好的想法或参考此类实施示例,我们将不胜感激。我也在寻找一个设计模式来描述这样的方案,但可以找到合适的一个。。。有什么想法吗?

共有2个答案

燕青青
2023-03-14

适配器是用于将一种类型转换为另一种类型的定义模式http://en.wikipedia.org/wiki/Adapter_design_pattern。

从其他对象创建新对象将是“原型”。

或者简单地使用“工厂”或“生成器”创建新实例。

唐恺
2023-03-14

我会选择一个公共接口和一个公共父类,可能还会使用生成器模式。。;

a common partialFooBar interface
a common fooBarChimera parent class

然后,你可以将你的转换器放入fooBarChimera父系统中(并强制执行所需的额外细节,以最终确定你想要的内容)。

您可能还想使用生成器模式。

来充实一下。。。

我坐头等舱

partialFooBarBuilder

有一个简单的默认构造器和setter方法。

最后一个方法将把这个类“转换”为“完整”版本,或fooBarChimera,然后只需要在其中包含“getter”方法。

正确的版本只能从这个构建器类(或foBarChimera)中获得,因此在返回最终正确的foo类之前,您可以更容易地强制执行内容处于良好状态(如果它链接到您的用户界面)。

所以你最终会遇到这样的事情。。。

public class buildpartFooBar implement fooBarCommon{
//fooBarCommon is the interface the enforces the commonality of between the 2 objects.    

public buildPartFooBar(){...}

...[various setter methods here ....]

//make the different types of object we may become
private foo1 makeFoo1(iNeedThisToBeAFoo1 object){...}
private  foo2 makeFoo2(iNeedThisToBeAFoo2 object){...}
private  bar1 makeBar1(iNeedThisToBeABar1 object){...}
private  bar2 makeBar2 (iNeedThisToBeABar2 object){...}
private fooBarChimera makeChimera (){...}

}//buildPartFooBar类结束

然后,包含makeFooFromBar方法就很简单了,您可以在其中返回foo1或Foo2或任何您喜欢的内容,您很可能会通过fooBarChimera类中的静态方法来实现这一点

请记住,您将需要处理您转换的bar和foo clase彼此相关的情况(您可能需要实现具有bar键和foo对象的某种形式的集合,或者这应该在您的foBarChimera某处实现)...

您可能会决定foo和bar也需要类似的方法,例如,同样,将它们作为静态比较包含在fooBarChimera中可能是明智的。这样的话,你只需要在父文件中写一次。

这个食物吧

可以吗?

因此,在创建时,您可以比较它们,并决定它们是否应自动链接,然后如果链接已存在于集合中,则保存转换操作。

您还需要确定转换是否为双向,一个foo可以是一个bar,但一个bar可能与两个foo兼容。

在这种情况下,您可能会决定前往一个可以处理这类事情并在其中存储foo和bar对象的数据库,这可能也比定制的Collection类容易,尤其是如果您为每个foo和bar提供一个uniquie objectID(guid)。

它可能会变得更先进。。。。这取决于你打算去哪里,听起来像是你自己设定的一项有趣的任务,我们能问一下你为什么要这样做吗?

我可能只是为了好玩。。。。比如,当我用java集合为一个遗留数据库建模时,我才意识到自己有多么愚蠢,只是把它转换成了一个更合理的数据库。

大卫

 类似资料:
  • 问题内容: 我从UDP套接字获取了一个字节片(),并希望将其视为整数片(),而无需更改基础数组,反之亦然。在C(++)中,我只是在指针类型之间进行转换;我将如何在Go中执行此操作? 问题答案: 正如其他人所说,在Go中强制转换指针被认为是错误的形式。这是正确的Go方式示例以及与C数组转换等效的示例。 警告:所有代码未经测试。 在此示例中,我们使用包将每组4个字节转换为。这样更好,因为我们指定了字节

  • 大多数程序能处理各种数据类型的信息。有时候所有的操作还会集中于某一种类型上,例如,整数加整数还是整数(只要结果不是太大,能用整数表示出来)。但是,常常需要将一种类型的数据转换为另外一种类型的数据,赋值、计算、给函数传值以及从函数返回值都可能会发生这种情况。对于内部的类到,编译器知道如何转换类型。程序员也可以用强制类型转换运算符实现内部类型之间的强制转换。 但是怎样转换用户自定义类型呢?编译器不知道

  • 主要内容:将二进制、八进制、十六进制转换为十进制,将十进制转换为二进制、八进制、十六进制,二进制和八进制、十六进制的转换,总结对于基础薄弱的读者,本节的内容可能略显晦涩和枯燥,如果你觉得吃力,可以暂时跳过,基本不会影响后续章节的学习,等用到的时候再来阅读。 上节我们对二进制、八进制和十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言。 将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位

  • 问题内容: 假设我有两种类似的类型设置为: 知道它们具有相同的字段,是否有直接的方法将值从类型1写入类型2?(除了编写将所有字段从源复制到目标的循环外) 谢谢。 问题答案: 对于您的特定示例,您可以轻松地将其转换:

  • 问题内容: C ++或Java中的类型转换和类型转换之间有什么区别? 问题答案: 类型 转换 将变量引用的值(内存块)视为与声明该变量的类型不同的类型。 类型 转换 实际上是在对该值进行转换。 在许多语言中, 某些 强制转换(通常是数字强制转换)的确会导致转换(这会因语言而异),但大多数情况下只是“将X当作Y处理”。 像人类语言的大多数方面一样,不幸的是,这些术语在不同社区中的使用略有不同,主要是

  • 本文向大家介绍类型转换(Type casting)和类型转换(Type conversion)之间的区别,包括了类型转换(Type casting)和类型转换(Type conversion)之间的区别的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将了解类型转换和类型转换之间的区别。 类型转换(Type casting) 开发人员使用强制转换运算符将数据类型转换为另一种数据类型。 它可以