Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通用Java代码难以理解?_Java_Generics - Fatal编程技术网

通用Java代码难以理解?

通用Java代码难以理解?,java,generics,Java,Generics,我找到了一个表示Java泛型功能的方法,但是我很难阅读和理解它。如何理解下面的Java代码行 public ContractValidator T validate(Validator,F object)这一行代码所在的段落解释说,过多使用泛型会使代码变得复杂。这句话的目的是要说明理解起来有多难 无论如何,这并不是泛型的一个好例子,事实上,我认为这是不正确的。在你写这行代码的那一段解释说,过多地使用泛型会使你的代码变得复杂。这句话的目的是要说明理解起来有多难 无论如何,它并不意味着是泛型的一个好

我找到了一个表示Java泛型功能的方法,但是我很难阅读和理解它。如何理解下面的Java代码行


public ContractValidator T validate(Validator,F object)

这一行代码所在的段落解释说,过多使用泛型会使代码变得复杂。这句话的目的是要说明理解起来有多难


无论如何,这并不是泛型的一个好例子,事实上,我认为这是不正确的。

在你写这行代码的那一段解释说,过多地使用泛型会使你的代码变得复杂。这句话的目的是要说明理解起来有多难


无论如何,它并不意味着是泛型的一个好例子,事实上,我认为它是不正确的。

好吧,我可以从中体会到一些困惑:泛型是破的。我的意思并不是说“它们对了解泛型的人来说毫无意义”;我的意思是他们没有编译。所以不要把他们说的话当作字面上的意思;这只会让你更加困惑

让我们从显而易见的开始。去掉所有的泛型,剩下的就是感知到的原始类型

public ContractValidator validate(Validator, Object object)
我删除了模棱两可的双返回,因为它没有多大意义。我还假设他们想要一个变量作为第一个参数

public ContractValidator validate(Validator validator, Object object) {
    return null;
}
所以我们得到的是一些
验证器
和一些
对象
进入这个
验证
方法,我们从中得到的是一个
契约验证器

这太棒了,除了我们可以验证任何东西(理论上)。如果我们的
验证器
被类型绑定到要验证的特定对象,该怎么办

public <T extends Contract> ContractValidator validate(Validator<T> validator, Object object) {
    return null;
}
这就是我不同意这个设计的地方。他们打算(出于某种原因)拥有一个未绑定的泛型类型;大概是为了让你验证任何东西。但我不知道这种类型有什么用途——它可以是任何东西

它是通过写作来完成的:

public <T extends Contract, F> ContractValidator<T> validate(Validator<T> validator, F object) {
    return null;
}
公共契约验证程序验证(验证程序验证程序,F对象){
返回null;
}

现在,我写了所有这些来有效地表明泛型是可以理解的,前提是您所展示的示例能够合理地编译并具有一定的语义意义。在大多数情况下,如果要使用泛型,那么这样做是因为您正在尝试创建一些多态方法,或者您正在尝试创建一个多态容器


关于泛型;Java跟踪从未让我在这一点上出错。

好吧,我可以从中体会到一些困惑:泛型被打破了。我的意思并不是说“它们对了解泛型的人来说毫无意义”;我的意思是他们没有编译。所以不要把他们说的话当作字面上的意思;这只会让你更加困惑

让我们从显而易见的开始。去掉所有的泛型,剩下的就是感知到的原始类型

public ContractValidator validate(Validator, Object object)
我删除了模棱两可的双返回,因为它没有多大意义。我还假设他们想要一个变量作为第一个参数

public ContractValidator validate(Validator validator, Object object) {
    return null;
}
所以我们得到的是一些
验证器
和一些
对象
进入这个
验证
方法,我们从中得到的是一个
契约验证器

这太棒了,除了我们可以验证任何东西(理论上)。如果我们的
验证器
被类型绑定到要验证的特定对象,该怎么办

public <T extends Contract> ContractValidator validate(Validator<T> validator, Object object) {
    return null;
}
这就是我不同意这个设计的地方。他们打算(出于某种原因)拥有一个未绑定的泛型类型;大概是为了让你验证任何东西。但我不知道这种类型有什么用途——它可以是任何东西

它是通过写作来完成的:

public <T extends Contract, F> ContractValidator<T> validate(Validator<T> validator, F object) {
    return null;
}
公共契约验证程序验证(验证程序验证程序,F对象){
返回null;
}

现在,我写了所有这些来有效地表明泛型是可以理解的,前提是您所展示的示例能够合理地编译并具有一定的语义意义。在大多数情况下,如果要使用泛型,那么这样做是因为您正在尝试创建一些多态方法,或者您正在尝试创建一个多态容器


关于泛型;Java跟踪从未让我在这方面出错。

阅读一些Java教程/书籍等将是一个好的开始……你到底不明白什么?从这里开始:这行中可能存在重复的错误:有两种返回类型
ContractValidator
t
,而不是一种返回类型和类型
Validator
的参数丢失。阅读一些java教程/书籍等将是一个好的开始…您到底不明白什么?从这里开始:这行中有错误的可能重复:有两个返回类型
ContractValidator
t
,而不是一个返回类型和缺少类型
验证程序
的参数。非常感谢您提供了非常广泛且绝对奇妙的100%答案。我实际上没有问题,因为你提供了有用的链接+10块给你!非常感谢您提供了非常广泛和绝对精彩的100%答案。我实际上没有问题,因为你提供了有用的链接+10块给你!