Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更好的设计选择:方法返回对象或传递';类<;T>;类型';作为论据?_Java_Spring_Orm - Fatal编程技术网

Java 更好的设计选择:方法返回对象或传递';类<;T>;类型';作为论据?

Java 更好的设计选择:方法返回对象或传递';类<;T>;类型';作为论据?,java,spring,orm,Java,Spring,Orm,在创建行映射器(将行映射到>=1个对象)时,我在对象关系映射过程中遇到了这种情况。我正在玩,您需要实现RowProcessor接口才能拥有“自己的”行映射器。这是方法签名(4种方法中的1种,返回单个对象、列表、映射和数组) 从DBUtil的方法到对象涉及基于反射的实例化和太多的类型转换,甚至无法取出对象 Spring看起来相当简单(相比之下更容易) 问题是设计的灵活性,哪种风格更好,什么时候你会选择基于反射的方法而不是后者(如上所述)?我只是好奇,所以我想我应该把它放出来,让它有一些想法。基本上

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

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

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


问题是设计的灵活性,哪种风格更好,什么时候你会选择基于反射的方法而不是后者(如上所述)?我只是好奇,所以我想我应该把它放出来,让它有一些想法。基本上,您认为DBUtils为什么采用基于反射的方法?有什么好处吗?

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

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

另请参见。@trashgood:谢谢链接:)也更合理。@trashgood:谢谢链接:)更合理这是灵活性/易用性与类型安全性的折衷吗?(可能采用了泛型:)反射不会使事情“复杂化”吗?随着时间的推移,您更喜欢(或看到更喜欢)哪种方法?这是灵活性/易用性与类型安全性的折衷吗?(可能采用了泛型:)反射不会使事情“复杂化”吗?随着时间的推移,您更喜欢(或看到更喜欢)哪种方法?
public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException 
{
    //conversion logic
}
Object mapRow(ResultSet rs, int rowNumber)
{
//conversion logic
}