泛型使用中,解决类型转换问题

遇到的问题是这样,系统中有一个字符类型的字段来存储一些通用的系统配置,虽然存储的形式是字符串,但是实际在系统中的使用类型则可能是string, bool, int, decimal.

这个时候就想写一个通用的方法来获取各种不同类型的返回值,当然这个时候想到的就是使用泛型。那么这个方法的定义大概就是这样:

T GetValue<T>(string key)

这个方法涉及到一个字符串类型转换成泛型的问题。

public T GetSingleConfigValue<T>(eConfigKeyName key, T defaultValue)
{
      var config = GetConfig(key)
      return (T)config;
}

直接使用上面的方式,就会出现如下的编译错误。

查了查资料,正确的方法是使用Convert.ChangeType方法:

(T) Convert.ChangeType(result, typeof (T));
时间: 2024-11-05 18:26:28

泛型使用中,解决类型转换问题的相关文章

泛型和强制类型转换

[泛型和强制类型转换] 编译器允许您将一般类型参数显式强制转换到其他任何接口,但不能将其转换到类: 但是,您可以使用临时的 Object 变量,将一般类型参数强制转换到其他任何类型: 不用说,这样的显式强制类型转换是危险的,因为如果为取代一般类型参数而使用的类型实参不是派生自您要显式强制转换到的类型,则可能在运行时引发异常.要想不冒引发强制类型转换异常的危险,一种更好的办法是使用 is 和 as 运算符,如代码块 6 所示.如果一般类型参数的类型是所查询的类型,则 is 运算符返回 true:如

SpringBank 开发日志 重新设计Action调用Service的参数传递 使用泛型解决类型转换问题

之前想的比较简单,请求到达controller的时候,传给action的参数没有经过任何封装,就是一个Map.然后action再调用service的时候,传递的参数也是map @Controller public class DepositController extends BaseController{ @TransactionMapping(transaction = "Deposit") public Map Deposit(Map request) { Map map = c

SpringMVC注解@initbinder解决类型转换问题

在使用SpringMVC的时候,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,而SpringMVC默认不支持这个格式的转换,所以需要手动配置,自定义数据的绑定才能解决这个问题.在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作.WebDataBinder是用来绑定请求参数到指定的属性编辑器.由于前台传到controller里的值是String类型的,当往Model里Set这个值的时候

Android通过泛型简化findViewById类型转换

以前老用findViewById,每次使用还得add cast一下今天看到一个视频(根据视频中使用的IDE推断,应该是几年前的视频了..),使用了一个方法,可以不用每次使用findViewById都去add cast. 我根据视频中的写法进行优化,具体做法: 创建一个BaseActivity,让它继承Activity,在其中添加如下方法: // 因为是findView所以泛型类型应该继承View protected <T extends View> T genericFindViewById(

泛型 Generic 类型擦除引起的问题及解决方法

参考:http://blog.csdn.net/lonelyroamer/article/details/7868820#comments 因为种种原因,Java不能实现真正的泛型,只能使用类型擦除来实现伪泛型,这样虽然不会有类型膨胀的问题,但是也引起了许多新的问题.所以,Sun对这些问题作出了许多限制,避免我们犯各种错误. 1.先检查,再编译,以及检查编译的对象和引用传递的问题 既然说类型变量会在编译的时候擦除掉,那为什么我们往ArrayList<String> arrayList=new

java集合框架--泛型

1.泛型概述 泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行.也被称为参数化类型,可以把类型当做参数一样传递过来,在传递过来之前并不明确,但是在使用的时候就明确了. 泛型是JDK5以后出现的新特性. 2.泛型出现的原因1 package com; import java.util.ArrayList; import java.util.Iterator; public class GenericDemo { public static void main(

集合框架、泛型、迭代(java基础知识十六)

1.ArrayList存储自定义对象并遍历 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException.* ArrayList存储自定义对象并遍历 ArrayList<Person> list = new ArrayList<>(); list.

泛型的基本介绍和使用

在开始深入学习java的泛型了,以前一直只是在集合中简单的使用泛型,根本就不明白泛型的原理和作用.泛型在java中,是一个十分重要的特性,所以要好好的研究下. 泛 型的定义:泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type)的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型.这种参数类型可以用在类.接口和方法的创建中,分别称为泛 型类.泛型接口和泛型方法. 泛型思想早在C++语言的模板(Templates)中就开始生根发芽,

[Java5新特性]泛型

Java中集合的问题 Java中的集合有个缺点:就是当我们把数据放置到集合中时,集合是不会记住数据类型的.也就是说,当我们再从集合中获取到数据时,数据类型都变成了Object类型了. 换句话讲,集合对元素类型是没有任何限制的.这样可能会出现一些问题,例如如果我们要创建一个专门存储字符串的List集合的话,也可以将Integer类型数据放置进入.即使放置进去的都是字符串数据,从List集合取出时,还是需要类型转换的(因为集合中元素类型都是Object类型). 例如下面这个例子:创建一个只保存字符串