java方法中与参数怎么调用_与Java方法调用中的类型参数有关的问题

Java 8的Java语言规范在“示例4.11-1。类型的用法”中提供了一个带有类型实参的方法调用示例:

void loop(S s) {

this.loop(s); // is the the type argument for the method call.

}

在该示例中,提供的类型实参是有意义的,但显然用于方法调用的类型实参也可以是多余的,并且完全没有意义,并且甚至不需要涉及泛型。例如:

void m() { }

void test() {

m();

this.m();

this.m(); // Compiles and runs OK!

this.m(); // Compiles and runs OK!

m(); // Won't compile: "illegal start of expression"

}

我有几个问题:

谁能提出Java允许这些冗余类型参数的正当理由?接受它们无害后,在我看来,编译器仍然可以并且应该抓住它们。

仅当带有类型实参的方法调用以“ this”为前缀时,该代码才会编译。否则,您将收到“表达式的非法开始”错误。那是个错误吗?不应有任何与“ this”一起使用的明确方法调用。也可以不用“这个”。

(这些问题的催化剂是甲骨文对我针对某人在此处提出的一个有趣的Java问题创建的错误报告的回应。)

更新2015年9月18日

我针对Oracle的此问题提出了错误JDK-8098556。这是他们的回应:

这不是问题 ;使用与普通方法相同的规则检查方法引用-请注意,对于普通方法,您始终可以提供冗余类型参数:

void m() { }

this.m(); //legal

按照15.13:方法(和构造函数)引用只是继承了此行为:“”如果方法引用表达式的形式为ReferenceType ::

[TypeArguments]标识符,则可能适用的方法是要搜索的具有适当类型的成员方法名称(由标识符提供),可访问性,统一性(n或n-1)和类型自变量arity(从[TypeArguments]派生),如§15.12.2.1中所指定。”

由于该答复确认了 TAsk 在下面已经提供的信息(包括引用JLS的相关部分),因此我接受了该回答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值