¿Podría explicar este fragment de código en términos de código C #?

De la página de documentation de Kotlin :

// public final class Gson { // ... // public <T> T fromJson(JsonElement json, // Class<T> classOfT) // throws JsonSyntaxException { // ... 

En el fragment de código anterior, entiendo todo less la Class<T> . Supongo que es el equivalente de C # de lo siguiente:

 public sealed class Gson { public T FromJson<T>(JsonElement json, System.Type Type) { } } 

Y el código del cliente diría algo como:

 var gson = new Gson(); var customer = gson.FromJson<Customer>(json, typeof(Customer)); 

Pero no puedo estar seguro porque todo el parámetro System.Type parece networkingundante frente al parámetro de tipo genérico T en la definición del método.

Además, en el mismo lugar en esa página, ¿qué es esa class.java en el siguiente fragment?

 inline fun <reified T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java) 

Supongo que la class Class en Java es similar a System.Type así que si quisiera decir, typeof(Customer) , ¿diría Customer.class ? ¿Es eso correcto?

¿Qué es class.java ?

    Java tiene borrado de tipo genérico : el tipo real T no está disponible para codificar en time de ejecución. Como Gson necesita saber cuál es el tipo de deserialization objective, pasar la Class<T> lo identifica explícitamente.

    Kotlin, por otro lado, tiene un sistema de types algo más fuerte que Java, y dado que la function no está en línea, el comstackdor sabe cuál es realmente el tipo genérico (la palabra key reified ). El constructo T::class.java le dice al comstackdor de Kotlin que determine cuál es el tipo apropiado T y luego en línea la reference de class a T

    Esta networkingefinición en línea es esencialmente azúcar sintáctica para Kotlin, lo que permite a los usuarios de Kotlin delegar la especificación codificada del tipo de destino a la inferencia del comstackdor.