gpt4 book ai didi

java - 更好的设计选择 : Method returning Object or passing 'Class type' as argument?

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:55 24 4
gpt4 key购买 nike

我在创建行映射器(将行映射到 >= 1 个对象)时在对象关系映射过程中遇到了这种情况。我正在玩DBUtils ,并且您需要实现 RowProcessor 接口(interface)才能拥有“自己的”行映射器。这是方法签名(4 个此类方法之一,返回单个对象、列表、映射和数组)

public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException 
{
//conversion logic
}

在 Spring 中,这是行映射的方法签名(只有 1 个方法):

Object mapRow(ResultSet rs, int rowNumber)
{
//conversion logic
}

从 DBUtil 的方法到对象涉及基于反射的实例化和太多的类型转换,甚至无法取出对象。

Spring 看起来相当简单(相比之下更容易)。

问题是,从设计的灵 active 来看,哪种风格更好,什么时候您会选择基于反射的方法而不是后者(如上所述)?我只是很好奇,所以我想我应该把它拿出来以获得一些想法。基本上,您认为 DBUtils 为何采用基于反射的方法?有什么优点吗?

最佳答案

在这种情况下使用反射(或巨大的 switch 语句或其他)具有将类型不安全性封装在一处的优点。调用者指定他们想要什么,这就是他们得到的返回。然后他们可以继续使用它,而无需任何强制转换等。您只需要在这一处手动检查类型安全性,编译器将在其他地方检查它。返回对象意味着调用者将进行大量强制转换,每个强制转换都可能带有 ClassCastException 并且需要手动检查。

关于java - 更好的设计选择 : Method returning Object or passing 'Class<T> type' as argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5329870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com