小技巧 - 简化你的泛型API

简介:

   以下,我使用一个实例,分享一下用于简化泛型API设计的小技巧,“如何在泛型方法调用时,过滤掉可以隐式推断出的泛型参数”:


原有设计:

    系统中原来有这样一个静态的泛型API:

1
protected  static  PropertyInfo<TProperty> RegisterProperty<TOwner, TProperty>(Expression<Func<TOwner, TProperty>> propertyLambdaExpression)

 

使用方法:

1
var  codeProperty = RegisterProperty<User, string >(e => e.Code);

 

可以看到,该方法虽然可以从参数中隐式推断出 P 的具体类型,但是无法推断出 T 的具体类型,所以需要显式指定T的类型。
由于语法特性的问题,我们不能使用RegisterProperty<User>(e => e.Code)的方法来只传递一个泛型参数给API;导致在使用该方法时,不得不把所有的的泛型参数都显式指定,也就是上面的使用方法。


灵光一现:

    如何做到不传递第二个泛型参数呢?在N天之后,发现了以下这个方法可以简化传入的泛型参数:

为该泛型方法声明一个泛型类:

1
2
3
4
5
6
7
8
9
10
11
public  class  PropertyRegister<TOwner>
{
     public  static  PropertyInfo<TProperty> Register<TProperty>(
         Expression<Func<TOwner, TProperty>> propertyLambdaExpression
         )
     {
         TOwner onwer;
         TProperty propery;
         //...
     }
}
1
  

这时,调用方法变为:

1
var  codeProperty = PropertyRegister<PBS>.Register(e => e.Code);

 


这样好吗?

    这个方法的好处在于简化泛型API的客户程序调用代码,只显式传入无法隐式推断的泛型参数,不再传入多余的泛型参数。
    在这个例子中,只有两个泛型参数,可能您会觉得多此一举。不过当你的参数更多,而无法推断的参数只有一个时,这个方法就有发挥的地方了。 :)

目录
相关文章
|
6月前
|
存储 安全 Java
常用类和基础api(一)
常用类和基础api(一)
26 0
|
7月前
|
存储 Java API
java常用API方法
java常用API方法
55 0
|
6天前
|
XML JSON API
深入了解API:详解应用程序接口的作用和原理
在现代软件开发领域中,API(Application Programming Interface,应用程序接口)扮演着至关重要的角色。无论是在Web开发、移动应用还是大型软件系统中,API都是不可或缺的组成部分。本文将深入探讨API的作用和原理,帮助读者更好地理解和应用API
|
2月前
|
存储 运维 安全
Java常用类和基础API
Java常用类和基础API
37 0
|
4月前
|
安全 API 数据安全/隐私保护
API 接口设计规范
API 接口设计规范
201 0
|
5月前
|
XML JSON API
API类型和集成规范指南
API类型和集成规范指南
|
6月前
|
Java API
Lambda表达式所有API整理
Lambda表达式所有API整理
68 0
|
6月前
|
安全 Java 编译器
JDK11 介绍讲解,语法改进,API增强
JDK 11进一步完善了JDK 9引入的模块化系统。模块化系统允许开发人员将代码和依赖项组织成模块,以提高可维护性、安全性和性能。开发人员可以使用`module`关键字定义模块,并使用`requires`和`exports`语句来声明模块之间的依赖关系和对外暴露的API。模块化系统还提供了更细粒度的访问控制,可以限制对模块中的内部API的访问。
100 0
|
7月前
|
Java API
Java常用API
Java常用API
36 0
|
10月前
|
Java API
Java序列化API的使用
Java序列化API的使用
75 0