在阅读协变量替代时,我发现一个非常奇怪的事实,
使用桥接技术实现协方差方法覆盖。它还说此功能是在java5及更高版本中实现的。(我认为这是因为从java5引入了泛型)
怎么发生的。请帮我举个例子。
考虑一个例子:
public interface Shape<T extends Shape<T>> {
T getType();
void setType(T type);
}
public class Circle implements Shape<Circle> {
Circle getType() { }
void setType(Circle circle) { }
}
到目前为止看起来不错。但是,在擦除类型之后,接口松开了它的泛型类型,并将该类型T
替换为上限。因此,接口和类如下所示:
public interface Shape {
Shape getType();
void setType(Shape type);
}
public class Circle implements Shape {
Circle getType() { }
void setType(Circle circle) { }
}
现在,这就是问题所在。Circle
擦除后的方法实际上不是的重写版本Shape
。请注意,现在的方法看上去对所采用的参数和返回的值施加了更大的限制。这是因为擦除会更改接口中方法的签名。
为了解决此问题,编译器为此添加了桥方法,该方法将调用委派给类中的实际方法。
因此,该类实际上已转换为:
public class Circle implements Shape {
Circle getType() { }
void setType(Circle circle) { }
// Bridge method added by compiler.
Shape getType() { return getType(); } // delegate to actual method
void setType(Shape shape) { setType((Circle)shape); } // delegate to actual method
}
因此,bridge方法现在是接口中方法的重写版本,并且它们将调用委派给执行任务的实际方法。
注意,在这种情况下,桥接方法中使用的类型是接口类型参数的擦除Shape
。
参考文献:
1. 说说 什么是AOP 2. AOP实现方式 3. MySQL的默认隔离级别 4. 说说隔离级别有哪些 5. 什么是不可重复读和幻读 6. 乐观锁与悲观锁 7. 公平锁和非公平锁 8. 什么是索引 9. 数据库常见的索引 10. 索引是怎么实现的 11. 说一说线程池 12. 线程池的具体工作过程 13. 线程池的拒
问题内容: 我想在Java中实现方法链接。 我该如何实现? 还请告诉我何时使用它。 我想创建可以按如下方式使用的方法链接: 或喜欢 或喜欢 问题答案: 让你的方法返回如下: 这样,每次调用其中一个方法后,你将获得返回的同一对象,以便可以调用另一个方法。 当你要在对象上调用一系列方法时,此技术很有用:它减少了实现该方法所需的代码量,并允许你在方法链之后使用单个返回值。 减少显示对话框所需的代码量的一
本文向大家介绍Jquery的Ajax技术使用方法,包括了Jquery的Ajax技术使用方法的使用技巧和注意事项,需要的朋友参考一下 Jquery的Ajax技术(重点) jquery是一个优秀的js框架,自然对js原生的ajax进行了封装,封装后的ajax的操作方法更简洁,功能更强大,与ajax操作相关的jquery方法有如下几种,但开发中经常使用的有三种: 1)$.get(url, [data],
问题内容: 我正在开发一个Java Web应用程序,该应用程序通过从Web服务加载的大型XML配置文件来使其行为成为基础。由于在访问应用程序的特定部分之前实际上并不需要这些文件,因此它们会延迟加载。当需要这些文件之一时,查询将发送到Web服务以检索相应的文件。由于某些配置文件可能会被大量使用,因此比其他配置文件使用的频率要高得多,我想设置某种类型的缓存(可能有1小时的过期时间),以避免一遍又一遍地
本文向大家介绍如何使用Java中的lambda和方法引用来实现IntPredicate接口?,包括了如何使用Java中的lambda和方法引用来实现IntPredicate接口?的使用技巧和注意事项,需要的朋友参考一下 IntPredicate接口是java.util.function包中定义的内置功能接口。该功能接口接受一个int值参数作为输入,并产生一个布尔值作为输出。此接口是Predicat
本文向大家介绍使用ajax技术实现txt弹出在页面上的方法,包括了使用ajax技术实现txt弹出在页面上的方法的使用技巧和注意事项,需要的朋友参考一下 使用ajax技术实现点击按钮,将TXT文本里的内容通过弹出框显示到页面上 以上就是使用ajax实现通过弹出窗打开一个text文件。 使用ajax技术实现txt弹出在页面上的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持