Java 假设以下是类中的方法头:public<;T实施可比<;T>&燃气轮机;tT最大值(T arg1,arg2)
我的一些Java作业遇到了问题。我就是不能理解这些泛型的概念 问题是: 假设以下是类中的方法头:Java 假设以下是类中的方法头:public<;T实施可比<;T>&燃气轮机;tT最大值(T arg1,arg2),java,generics,Java,Generics,我的一些Java作业遇到了问题。我就是不能理解这些泛型的概念 问题是: 假设以下是类中的方法头: public <T implements Comparable <T>>T greatest(T arg1, T arg2) public T最大值(T arg1,T arg2) 找到错误了吗 我真的不知道该怎么走 要编译这些内容,必须按以下方式进行修改: public <T extends Comparable <T>> T greatest(T
public <T implements Comparable <T>>T greatest(T arg1, T arg2)
public T最大值(T arg1,T arg2)
找到错误了吗
我真的不知道该怎么走 要编译这些内容,必须按以下方式进行修改:
public <T extends Comparable <T>> T greatest(T arg1, T arg2)
public T最大值(T arg1,T arg2)
Comparable是一个接口,但在此上下文中,extends用于表示“extends”(用于类)或“implements”(用于接口)。要使该内容编译,必须按以下方式修改:
public <T extends Comparable <T>> T greatest(T arg1, T arg2)
public T最大值(T arg1,T arg2)
Comparable是一个接口,但在此上下文中,extends用于表示“extends”(用于类)或“implements”(用于接口)。更正了输入错误后,它可以很好地编译
当然,您可以使用
compariable使其稍微灵活一些,并纠正拼写错误,它编译得很好
当然,您可以使用Comparable稍微灵活一点。错误在于您不能在方法签名中使用关键字实现。仅在类内声明。
这两种方法都可以编译:
public <T extends Comparable<T>>T greatest(T arg1, T arg2){
return null;
}
public <T extends String>T greatest(T arg1, T arg2){
return null;
}
public T最大值(T arg1,T arg2){
返回null;
}
公共T最大(T arg1,T arg2){
返回null;
}
错误在于不能在方法签名中使用关键字implements。仅在类内声明。
这两种方法都可以编译:
public <T extends Comparable<T>>T greatest(T arg1, T arg2){
return null;
}
public <T extends String>T greatest(T arg1, T arg2){
return null;
}
public T最大值(T arg1,T arg2){
返回null;
}
公共T最大(T arg1,T arg2){
返回null;
}
我非常需要一个解释,因为我真的不知道怎么去
假设你想让我们解释签名的意思
这可以分为两部分:
public <T ...> T greatest(T arg1, T arg2)
这意味着类型T
必须实现Comparable
接口,并将T
作为其类型参数。现在,如果您查看javadocs中的Comparable,您将看到它只有一个方法:
public int compareTo(T other);
指定为将此
与其他
进行比较,并根据此
是否(分别)小于、等于或大于其他
返回小于零、零或大于零的数字。(阅读javadoc!)
所以基本上这是说T
必须是一个带有compareTo
方法的类。明显的意图是magest
方法将使用compareTo
方法来找出它的两个参数中哪个更大。。。然后把它还给我
关于解释语法,有两种可能的答案:
- 语法规则就是语法规则。您只需遵守它们,否则您的程序将无法编译
- JLS设计者必须在通用语法中选择使用
实现
或扩展
,或者使用一些新的关键字或符号:
- 添加新的关键字或符号会对语言/工具链的其他部分产生太大的影响,因此它们是“过时的”
- 允许
实现
或扩展
是多余的,可能会导致不必要的混淆
- 根据
implements
或extends
关键字的其他用法,对于这些选择中的哪一个更好,(IMO)没有令人信服的论据。如果他们是根据掷硬币决定的,我不会感到惊讶
我非常需要一个解释,因为我真的不知道怎么去
假设你想让我们解释签名的意思
这可以分为两部分:
public <T ...> T greatest(T arg1, T arg2)
这意味着类型T
必须实现Comparable
接口,并将T
作为其类型参数。现在,如果您查看javadocs中的Comparable,您将看到它只有一个方法:
public int compareTo(T other);
指定为将此
与其他
进行比较,并根据此
是否(分别)小于、等于或大于其他
返回小于零、零或大于零的数字。(阅读javadoc!)
所以基本上这是说T
必须是一个带有compareTo
方法的类。明显的意图是magest
方法将使用compareTo
方法来找出它的两个参数中哪个更大。。。然后把它还给我
关于解释语法,有两种可能的答案:
- 语法规则就是语法规则。您只需遵守它们,否则您的程序将无法编译
- JLS设计者必须在通用语法中选择使用
实现
或扩展
,或者使用一些新的关键字或符号:
- 添加新的关键字或符号会对语言/工具链的其他部分产生太大的影响,因此它们是“过时的”
- 允许
实现
或扩展
是多余的,可能会导致不必要的混淆
- 根据
implements
或extends
关键字的其他用法,对于这些选择中的哪一个更好,(IMO)没有令人信服的论据。如果他们是根据掷硬币决定的,我不会感到惊讶
实施
实施
都无效。。。阅读。对不起,错别字我更正了,时间还早这整晚都在困扰着我啊,所以我可以扩展它,我的意思是,这不是比工具更有效吗?T Ag1和T ARG2是什么?我从未见过作为参数使用。N.B:我回滚我的编辑,因为滥用<代码>实现而不是<代码>扩展< /代码>可能是PAR。