java中的捕获是什么,什么是Java中的捕获转换,谁能给我举例?

I've noticed JLS talks of 5.1.10 Capture Conversion, but I fail to understand what they are.

Can anyone explain them to me/give examples?

解决方案

Capture conversion was designed to make wildcards (in generics), ? useful.

Suppose we have the following class:

public interface Test {

public void shout(T whatever);

public T repeatPreviousShout();

}

and somewhere on our code we have,

public static void instantTest(Test> test) {

System.out.println(test.repeatPreviousShout());

}

Because test is not a raw Test and since repeatPreviousShout() in "hindsight" returns a ?, the compiler knows that there's a T that serves as a type parameter for Test.

This T is for some unknown T so the compiler erases the unknown type (for wildcard, it replaces with Object)., hence repeatPreviousShout() returns an Object.

But if we had,

public static void instantTest2(Test> test) {

test.shout(test.repeatPreviousShout());

}

The compiler would give us an error of something like Test cannot be applied (where xxx is a number, e.g. 337).

This is because the compiler tries to do the type safety check on shout() but since it received a wildcard, it doesn't know what T represents, hence it creates a placeholder called capture of.

Capture conversion is what allows the

compiler to manufacture a placeholder

type name for the captured wildcard,

so that type inference can infer it to

be that type.

Hope this helps you.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值