类层次结构中的引用关系必须在同一ClassLoader下

编写接口
/*
* Copyright (c) 2008 Skyon Technology Ltd.
* All rights reserved.
*
* project: ims
* create: 2013-6-7
* cvs: $Id: $
*/
package com.skyon.cl.test;

/**
* TODO (2013-6-7 上午10:27:23) 请添加 A 类的注释。
* @author dylan0514
* @version $Revision: 1.1 $
*/
public interface A {

}

实现类
/*
* Copyright (c) 2008 Skyon Technology Ltd.
* All rights reserved.
*
* project: ims
* create: 2013-6-7
* cvs: $Id: $
*/
package com.skyon.cl.test;

/**
* TODO (2013-6-7 上午10:28:26) 请添加 AImpl 类的注释。
* @author dylan0514
* @version $Revision: 1.1 $
*/
public class AImpl implements A {

}

将AImpl打成JAR包,放置于c:/下
测试类

/*
* Copyright (c) 2008 Skyon Technology Ltd.
* All rights reserved.
*
* project: ims
* create: 2013-6-7
* cvs: $Id: $
*/
package com.skyon.cl.test;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

/**
* TODO (2013-6-7 上午10:27:06) 请添加 ClassloaderTest 类的注释。
* @author dylan0514
* @version $Revision: 1.1 $
*/
public class ClassloaderTest {

/**
* @param args
* @throws MalformedURLException
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*/
public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
// TODO (2013-6-7 上午10:27:06) 自动生成方法存根

URLClassLoader url = new URLClassLoader(new URL[]{new URL("file:///c:/test.jar")},null);
Class azz = (Class) url.loadClass("com.skyon.cl.test.AImpl");
System.out.println(A.class.isAssignableFrom(AImpl.class));
System.out.println(A.class.isAssignableFrom(azz));
System.out.println(azz == AImpl.class);
A a = (A) azz.newInstance();
System.out.println("azz:"+azz.getClassLoader()+" A:" + A.class.getClassLoader() +" AImpl:"+AImpl.class.getClassLoader());
}

}

运行结果:
[color=red]true
false
false
Exception in thread "main" java.lang.ClassCastException: com.skyon.cl.test.AImpl cannot be cast to com.skyon.cl.test.A
at com.skyon.cl.test.ClassloaderTest.main(ClassloaderTest.java:37)[/color]
[color=blue][size=large]结果可证明接口引用与实现类处于不同ClassLoader不能兼容[/size]。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值