`
freish
  • 浏览: 82903 次
  • 性别: Icon_minigender_1
  • 来自: 摄影帝国
社区版块
存档分类
最新评论

java bridge method

    博客分类:
  • java
阅读更多

java编译器采用bridge方法来兼容本该使用泛型的地方使用了非泛型的用法的问题。

 

如下代码:

 

public class TestBridgeMethod {
	public static void main(String[] args) {
		P p = new S();
		p.test(new Object());
	}
}

class P<T> {
	public T test (T t){
		return t;
	}
}

class S extends P<String> {
	@Override
	public String test(String t) {
		return t;
	}
}

 

p引用的是S的对象,但S的test方法返回值是String,在jdk1.4中没有泛型,就不会对p.test(new Object());进行检查,这样在调用的时候就会报ClassCastException

声明p的时候使用P<String> p就不会有这样的问题了。

 

 

为了兼容非泛型的代码,java编译器为test生成了两个方法。看下面的代码:

import java.lang.reflect.Method;
import java.util.Arrays;


public class TestBridgeMethod {
	public static void main(String[] args) {
		Class<?> clazz = S.class;
		Method[] methods = clazz.getMethods();
		for(Method method : methods) {
			System.out.println(method.getName() + ":" + Arrays.toString(method.getParameterTypes()) + method.isBridge());
		}
	}
}

class P<T> {
	public T test (T t){
		return t;
	}
}

class S extends P<String> {
	@Override
	public String test(String t) {
		return t;
	}
}
 

 

运行结果为:

 

test:[class java.lang.String]false

test:[class java.lang.Object]true

getClass:[]false

hashCode:[]false

equals:[class java.lang.Object]false

toString:[]false

notify:[]false

notifyAll:[]false

wait:[long, int]false

wait:[]false

wait:[long]false

 

编译器为S生成了两个test方法,一个参数为String,用于泛型。一个参数为Object,用于非泛型,这个方法就是bridge方法,调用method.isBridge返回true

分享到:
评论
2 楼 bo_hai 2016-12-16  
shuaiji 写道
你说女女么,我喜欢女女女

有病,得冶。
1 楼 shuaiji 2011-09-09  
你说女女么,我喜欢女女女

相关推荐

    JAVA调用C++的dell应用例子

    Jni(Java Native Interface)是sun提供的java与系统中的原生方法交互的技术(在windows\linux系统中,实现java与native method互调)。目前只能由c/c++实现。后两个都是sourceforge上的开源项目,同时也都是基于jni...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第6章 桥接(bridge)模式 52 第7章 职责型模式介绍 62 第8章 单例(singleton)模式 67 第9章 观察者(observer)模式 72 第10章 调停者(mediator)模式 85 第11章 代理(proxy)模式 97 第12章 职责链(chain of ...

    java 设计模式

    java 设计模式 bridge CommandPattern factoryMethod simpleFactory

    《Java Design Patterns》高清完整英文PDF版

    Learn how to implement design patterns in Java: each pattern in Java Design Patterns ...Chapter 22: Bridge Patterns (Or Handle/Body Patterns) Chapter 23: Visitor Patterns Chapter 24: Interpreter Patterns

    java设计模式教程+源代码

    Bridge ( 桥接模式 ) Composite ( 组合模式 ) Decorator ( 装饰模式 ) Facade ( 外观模式 ) Flyweight ( 享元模式 ) Proxy ( 代理模式 ) Chain of Responsibility ( 责任链模式 ) Command ( 命令模式 ) ...

    java面试800题

    facade门面模式、proxy代理模式、adapter适配器(变压器)模式、composite合成模式、decorator装饰模式、bridge桥梁模式、flyweight享元模式 行为模式 template模板方法模式、memento备忘录模式、observer观察者模式...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    Java面试 java设计模式整理 单例、工厂、策略等 面试使用,学习使用

    java的设计模式大体上分为三大类: 2 设计模式遵循的原则有6个: 2 1. 工厂模式(Factory Method) 2 2. 抽象工厂模式(Abstract Factory) 3 3. 单例模式(Singleton) 4 4.建造者模式(Builder) 4 5. 原型模式...

    word源码java-java-knowledge-collection:Java核心知识点梳理

    桥接模式(Bridge) 组合模式(Composite) 装饰模式(Decorator) 外观模式(Facade) 享元模式(Flyweight) 代理模式(Proxy) 行为型 职责链模式(Chain of Responsibility) 命令模式(Command) 解释器模式...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式 (3)设计模式样例(24个讲解样例程序) pattern/src/principle/liskovsubstitution//10.3.2里氏代换原则 pattern/src/creation/factorymethod //11.1...

    Java反编译软件JAD1

    -disass - disassemble method bytecodes (no JAVA source generated) -f - output fully qualified names for classes/fields/methods -ff - output class fields before methods (default: after methods) -i ...

    Head First 设计模式 JAVA源码

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...

    一些Java中不为人知的特殊方法.docx

    但同时,getDeclaredMethods()或者getMethods()返回的这些方法,Modifier.isVolatile(method.getModifiers())的结果却是true。 一些用户遇到过这样的问题。他们发现,使用immutator(这个项目探索了Java的一些不为人...

    java之23种设计模式

    设计模式之Java实现源码,其中包含三大类,23种,分别为创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Singleton(单例) 结构型 6. ...

    HeadFirst 设计模式java源代码

    第1章到第 11章陆续介绍的设计 5b4 式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、 Composite、State、Proxy。...

    JAVA设计模式.rar

    策略模式【STRATEGY PATTERN】 ...桥梁模式【BRIDGE PATTERN】  命令模式【COMMAND PATTERN】  装饰模式【DECORATOR PATTERN】 迭代器模式【ITERATOR PATTERN】  组合模式【COMPOSITE PATTERN】 ......

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、...

    JAVA设计模式-day2.pdf

    JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...

    23种设计模式的Java实现

    23种设计模式 Adapter Singleton FactoryMethod Bridge 等等。。。

    java高手真经 (UML建模+设计模式+面向服务架构) 卷1

    pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/structure/flyweight //12.7享元模式 pattern/src/behavior/strategy //13.1策略模式 pattern/src/...

Global site tag (gtag.js) - Google Analytics