您能否用 C# 代码来解释这段代码?
Could you please explain this piece of code in terms of C# code?
来自 Kotlin documentation 页面:
// public final class Gson {
// ...
// public <T> T fromJson(JsonElement json,
// Class<T> classOfT)
// throws JsonSyntaxException {
// ...
在上面的代码片段中,除了 Class<T>
之外的所有内容我都理解。我假设它是 C# 等价于以下内容:
public sealed class Gson
{
public T FromJson<T>(JsonElement json,
System.Type Type)
{
}
}
客户端代码会这样写:
var gson = new Gson();
var customer = gson.FromJson<Customer>(json, typeof(Customer));
但我不能确定,因为面对方法定义中的通用类型参数 T
,整个 System.Type
参数似乎是多余的。
此外,在该页面的同一位置,以下代码段中的 class.java
是什么?
inline fun <reified T: Any> Gson.fromJson(json):
T = this.fromJson(json, T::class.java)
我假设 Java 中的 class Class
类似于 System.Type
所以如果你想说 typeof(Customer)
,你会说Customer.class
?对吗?
什么是 class.java
?
Java 具有 通用类型擦除 :实际类型 T
在运行时不可用于代码。由于 Gson 需要知道目标反序列化类型是什么,因此传递 Class<T>
明确标识它。
另一方面,Kotlin 的类型系统比 Java 强一些,并且由于函数是内联的,编译器知道泛型类型实际上是什么(reified
关键字).构造 T::class.java
告诉 Kotlin 编译器确定适当的类型 T
是什么,然后将 class 引用内联到 T
.
这种内联重新定义本质上是 Kotlin 的语法糖,允许 Kotlin 用户将目标类型的硬编码规范委托给编译器的推理。
来自 Kotlin documentation 页面:
// public final class Gson {
// ...
// public <T> T fromJson(JsonElement json,
// Class<T> classOfT)
// throws JsonSyntaxException {
// ...
在上面的代码片段中,除了 Class<T>
之外的所有内容我都理解。我假设它是 C# 等价于以下内容:
public sealed class Gson
{
public T FromJson<T>(JsonElement json,
System.Type Type)
{
}
}
客户端代码会这样写:
var gson = new Gson();
var customer = gson.FromJson<Customer>(json, typeof(Customer));
但我不能确定,因为面对方法定义中的通用类型参数 T
,整个 System.Type
参数似乎是多余的。
此外,在该页面的同一位置,以下代码段中的 class.java
是什么?
inline fun <reified T: Any> Gson.fromJson(json):
T = this.fromJson(json, T::class.java)
我假设 Java 中的 class Class
类似于 System.Type
所以如果你想说 typeof(Customer)
,你会说Customer.class
?对吗?
什么是 class.java
?
Java 具有 通用类型擦除 :实际类型 T
在运行时不可用于代码。由于 Gson 需要知道目标反序列化类型是什么,因此传递 Class<T>
明确标识它。
另一方面,Kotlin 的类型系统比 Java 强一些,并且由于函数是内联的,编译器知道泛型类型实际上是什么(reified
关键字).构造 T::class.java
告诉 Kotlin 编译器确定适当的类型 T
是什么,然后将 class 引用内联到 T
.
这种内联重新定义本质上是 Kotlin 的语法糖,允许 Kotlin 用户将目标类型的硬编码规范委托给编译器的推理。