泛型错误
The type parameter 'T' cannot be used with the 'as' operator because it does not have a class type constraint nor a 'class' constraint
如果T是接口
这是错误的 :return System.Activator.CreateInstance(reType) as T;
正确的写法 T t1=(T)System.Activator.CreateInstance(reType) ;
错误的
public class EventIDDictionary<T> where T : MKProtocol
{
private MKHandler defaultHandler;
private Dictionary<String, Type> productModuleDictionary = new Dictionary<string, Type>();
private Dictionary<String, Type> ActionDictionary = new Dictionary<string, Type>();
public void AddDictionary(String eventId, Type type)
{
if (type == null)
{
throw new ServerInitException("增加AddDictionary,eventId=" + eventId + ",type不能为null");
}
if (String.IsNullOrEmpty(eventId))
{
throw new ServerInitException("增加AddDictionary,eventId不能为空,type=" + type.FullName);
}
if(eventId.Length==12){
if (ActionDictionary.ContainsKey(eventId))
{
throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + ActionDictionary[eventId].FullName);
}
ActionDictionary.Add(eventId, type);
}
else if (eventId.Length == 6)
{
if (productModuleDictionary.ContainsKey(eventId))
{
throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + productModuleDictionary[eventId].FullName);
}
productModuleDictionary.Add(eventId, type);
}
else
{
throw new ServerInitException("增加AddDictionary,eventId位数不对=" + eventId + "type=" + type.FullName);
}
}
public void DeleteDictionary(String eventId)
{
if (String.IsNullOrEmpty(eventId))
{
throw new ServerInitException("删除DeleteDictionary,eventId不能为空");
}
if (eventId.Length == 12)
{
if (ActionDictionary.ContainsKey(eventId))
{
ActionDictionary.Remove(eventId);
}
}
if (eventId.Length == 6)
{
if (productModuleDictionary.ContainsKey(eventId))
{
productModuleDictionary.Remove(eventId);
}
}
}
public virtual T GetHandler(MKEntity entity)
{
Type reType=null;
if (entity == null || String.IsNullOrEmpty(entity.EventID))
return default(T);
if (entity.EventID.Length != 12)
{
return default(T);
}
if (ActionDictionary.ContainsKey(entity.EventID))
{
reType= ActionDictionary[entity.EventID];
}
if (productModuleDictionary.ContainsKey(entity.EventID.Substring(0, 6)))
{
reType= productModuleDictionary[entity.EventID.Substring(0, 6)];
}
return System.Activator.CreateInstance(reType) as T;
}
}
这是正确的
public class EventIDDictionary<T> where T : MKProtocol
{
private MKHandler defaultHandler;
private Dictionary<String, Type> productModuleDictionary = new Dictionary<string, Type>();
private Dictionary<String, Type> ActionDictionary = new Dictionary<string, Type>();
public void AddDictionary(String eventId, Type type)
{
if (type == null)
{
throw new ServerInitException("增加AddDictionary,eventId=" + eventId + ",type不能为null");
}
if (String.IsNullOrEmpty(eventId))
{
throw new ServerInitException("增加AddDictionary,eventId不能为空,type=" + type.FullName);
}
if(eventId.Length==12){
if (ActionDictionary.ContainsKey(eventId))
{
throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + ActionDictionary[eventId].FullName);
}
ActionDictionary.Add(eventId, type);
}
else if (eventId.Length == 6)
{
if (productModuleDictionary.ContainsKey(eventId))
{
throw new ServerInitException("增加AddDictionary,eventId=" + eventId + "type=" + type.FullName + "已经存在,现有type=" + productModuleDictionary[eventId].FullName);
}
productModuleDictionary.Add(eventId, type);
}
else
{
throw new ServerInitException("增加AddDictionary,eventId位数不对=" + eventId + "type=" + type.FullName);
}
}
public void DeleteDictionary(String eventId)
{
if (String.IsNullOrEmpty(eventId))
{
throw new ServerInitException("删除DeleteDictionary,eventId不能为空");
}
if (eventId.Length == 12)
{
if (ActionDictionary.ContainsKey(eventId))
{
ActionDictionary.Remove(eventId);
}
}
if (eventId.Length == 6)
{
if (productModuleDictionary.ContainsKey(eventId))
{
productModuleDictionary.Remove(eventId);
}
}
}
public virtual T GetHandler(MKEntity entity)
{
Type reType=null;
if (entity == null || String.IsNullOrEmpty(entity.EventID))
return default(T);
if (entity.EventID.Length != 12)
{
return default(T);
}
if (ActionDictionary.ContainsKey(entity.EventID))
{
reType= ActionDictionary[entity.EventID];
}
if (productModuleDictionary.ContainsKey(entity.EventID.Substring(0, 6)))
{
reType= productModuleDictionary[entity.EventID.Substring(0, 6)];
}
T t1=(T)System.Activator.CreateInstance(reType) ;
return t1;
}
}
分享到:
相关推荐
Java泛型的用法及T.class的获取过程解析 Java泛型是Java编程语言中的一种重要特性,它允许开发者在编写代码时指定类型参数,从而提高代码的灵活性和可读性。本文将详细介绍Java泛型的用法 及T.class的获取过程解析...
本文将深入探讨泛型类、泛型方法、泛型接口和泛型委托,并通过实例来阐述它们的应用。 首先,我们来看泛型类。泛型类是具有一个或多个类型参数的类。类型参数是在定义类时使用的占位符,实际的类型在创建类的实例时...
在C#编程中,泛型列表`List<T>`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List<T>`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...
涵盖了泛型的基础知识、泛型类、泛型方法、通配符、擦除和翻译、类型安全、类型参数、实际类型参数、擦除、翻译、转型和 instanceof、数组、Class Literals as Run-time Type Tokens、通配符匹配、泛型化老代码等多...
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
- 类型参数(Type Parameter):在创建泛型类或泛型方法时使用的占位符,例如 `<T>`、`<E>` 等。 - 类型参数边界(Type Bounds):可以限制类型参数的类型,如 `class Box<T extends Number>` 指定 `T` 必须是 `...
#### 八、Class Literals as Run-time Type Tokens 使用 `Class` 字面量可以在运行时获取类型的元数据信息。这对于实现泛型方法时非常有用,特别是在需要确定某个类型的实例是否符合某种类型条件时: ```java ...
Java 泛型是一种强大的语言特性,自JDK 5.0引入以来,极大地...理解并熟练运用泛型,能够显著提升Java代码的质量,减少类型转换错误,并提高代码的可维护性。在设计复杂的数据结构或容器类时,泛型是必不可少的工具。
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照
C#中的泛型接口如`IEnumerable<T>`和泛型类如`List<T>`、`Dictionary<TKey, TValue>`是泛型集合的基础。这些接口和类定义了操作数据的一般方法,而`T`则代表一个未指定的类型参数,可以在实例化时指定具体类型。 2...
- **Bean容器**:Spring的ApplicationContext接口提供了泛型版本的getBean方法,如`ApplicationContext.getBean(Class<T> requiredType)`,这样可以确保在获取Bean时的类型安全。 - **AOP代理**:Spring支持基于...
Type arrayType = new TypeToken<T[]>(){}.getType(); T[] myArray = gson.fromJson(jsonString, arrayType); ``` 5. **复杂泛型的处理** 如果你正在处理的泛型结构比较复杂,例如嵌套的泛型,那么可能需要创建...
Java泛型是自Java 1.5版本引入的一项重要特性,极大地提高了代码的类型安全性和重用性。本文将深入探讨Java泛型的概念、优点、使用方式及其在实际开发中的应用。 **一、泛型的基本概念** 泛型是Java语言中的一种...
在C#中,泛型主要体现在以下几个方面:泛型类、泛型接口、泛型方法、泛型委托以及泛型集合。 1. **泛型类**:泛型类是在声明类时定义一个或多个类型参数。例如,`List<T>` 就是一个典型的泛型类,其中 `T` 是类型...
4. **约束**:为了限制泛型的使用,我们可以添加类型约束,如`where T : class`表示`T`必须是引用类型,或者`where T : struct`表示`T`必须是值类型。此外,还可以指定`T`必须实现特定接口或具有特定基类。 5. **...
- `where T : interfaceType`:T必须实现interfaceType接口。 - `where T : U`:T必须是U的子类型。 6. **泛型集合**:C#的System.Collections.Generic命名空间提供了许多泛型集合,如List<T>、Dictionary<TKey, ...
这段代码展示了如何定义一个泛型类`MyClass<T>`,其中`T`是一个类型参数。`where`子句用于对类型参数添加约束,这里指定了`T`必须继承自`BaseClass`并且实现`ISomeInterface`接口。这样做的好处是可以确保编译器能够...