为什么改造广告是“类型安全”库?

2022-09-02 04:17:10

我只是浏览了他们的主页,上面写着,

适用于 Android 和 Java 的类型安全 HTTP 客户端

为什么Retrofit宣称自己是类型安全的,而其他库(许多其他流行的库)却没有?

在你回答之前...

这里也有同样问题的答案。它说,

类型安全是编程语言阻止或防止类型错误的程度。类型错误是由程序的常量、变量和方法(函数)的不同数据类型之间的差异引起的错误或不良程序行为,例如,将整数(int)视为浮点数(float)。这在静态类型语言(如Java和C)中很常见。

因此,改造可以防止这种类型的错误

如果这真的是答案,那么许多库可以防止这些类型的错误,但没有一个被宣传为类型安全。那么这是营销的事情吗?

我认为上述答案是不够的,因为类型安全的定义没有得到认真对待。

无论如何,还有另一篇定义了类型安全的帖子。他们举了一些例子:

类型安全意味着编译器将在编译时验证类型,如果您尝试为变量分配错误的类型,则会引发错误。

一些简单的例子:

// Fails, Trying to put an integer in a string
String one = 1;
// Also fails.
int foo = "bar";

这也适用于方法参数,因为您要向它们传递显式类型:

int AddTwoNumbers(int a, int b)
{
    return a + b;
}

如果我尝试使用以下命令调用它:

int Sum = AddTwoNumbers(5, "5");

根据上面的定义,它是语言(Java),而不是专门用于TypeSafe的库。

所以,我再问一遍,为什么改造将自己宣传为类型安全库?


答案 1

我没有考虑太多,但从我开始使用Retrofit的那一刻起,我就把这个标题理解为在更高的抽象层上的类型安全,而不是其他人在这里谈论的。

通常,我们将编程语言作为类型安全与否的“目标”。我认为Retrofit的标题类型安全;)如果我们假装整个HTTP调用是一个单一的编程语言指令(可能有一些参数和值),那么我们确实可以说改造是类型安全的......你已经严格定义了你得到什么样的结果。并且您得到这个或什么都没有/错误。当然,错误是在运行时,因为您永远无法真正知道将从Internet检索到的内容。当然,许多其他图书馆可以做到这一点,而不仅仅是改造。当然,您可以通过定义返回值为RecertBody类型的服务来误导改造的类型安全性(可以接受任何内容)。但一般来说,开箱即用,您将获得库,该库将为您检查,解析,验证HTTP调用的响应,转换为正确的类型,并且在出现任何问题时 - 将为您提供错误。

我现在脑海中的简单类比(就类型安全口号而言):

  • 编程语言有:指令+参数和值的类型

  • 改造有:http call + body & response的结构

最好的问候, 达雷克


答案 2

查看改造项目的封面,似乎类型安全中的类型是指请求正文和响应正文对象。

我们必须记住,改造是在OKHttp上构建的,它只能处理和对象。Retrofit 以其能够使用 s 将这些类型安全地序列化为其他类型和从其他类型序列化而自豪。RequestBodyResponseBodyConverter

类型安全中的安全是指改造处理所有样板代码,以确保在构建和解析对象时进行正确的类型转换。改造带有几个内置的s,它们围绕着流行的序列化库,如GSon和Jackson。RequestBodyResponseBodyConverter

TL;DR

上述类型安全是改造,承担将 HTTP 请求从 DTO 中解析出 HTTP 响应的责任。

您(开发人员)可以像往常一样继续使用您选择的序列化库,而不必担心您在该主题上漂亮的小脑袋。


推荐