首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

eclipse中package/class/method完全相同的引用顺序有关问题

2012-11-23 
eclipse中package/class/method完全相同的引用顺序问题.现有三个Eclipse的java项目如下, 其中Test3引用了T

eclipse中package/class/method完全相同的引用顺序问题.


现有三个Eclipse的java项目如下, 其中Test3引用了Test1和Test2同时作为项目依赖.

eclipse中package/class/method完全相同的引用顺序有关问题

其中, Test1中的A.java代码如下:

package com.cirotech.test;public class A {public void f() {System.out.println("From Test1.A");}}


 

Test2中的A.java代码如下:

package com.cirotech.test;public class A {public void f() {System.out.println("From Test2.A");}}


 

Test3中B.java代码如下:

import com.cirotech.test.A;public class B {/** * @param args */public static void main(String[] args) {A a = new A();a.f();}}


 

运行B.java, 结果如下:

From Test1.A

 

很奇怪啊, 估计是Eclipse引用顺序为题, 于是打开%Workspece%\Test3\.classpath, 发现顺序如下:

<?xml version="1.0" encoding="UTF-8"?><classpath><classpathentry kind="src" path="src"/><classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/><classpathentry combineaccessrules="false" kind="src" path="/Test1"/><classpathentry combineaccessrules="false" kind="src" path="/Test2"/><classpathentry kind="output" path="bin"/></classpath>


 

手工颠倒顺序为:

 

<?xml version="1.0" encoding="UTF-8"?><classpath><classpathentry kind="src" path="src"/><classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/><classpathentry combineaccessrules="false" kind="src" path="/Test2"/><classpathentry combineaccessrules="false" kind="src" path="/Test1"/><classpathentry kind="output" path="bin"/></classpath>


再次运行B.java, 果然结果变了:

From Test2.A

 

哈哈, 看来classpath的加载顺序确实能影响结果. 不过, 编译器居然没有warn引用了2个package/class/method完全相同的java文件.

这点确实容易产生问题.

 

<?xml version="1.0" encoding="UTF-8"?><classpath><classpathentry kind="src" path="src"/><classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/><classpathentry combineaccessrules="false" kind="src" path="/Test2"/><classpathentry combineaccessrules="false" kind="src" path="/Test1"/><classpathentry kind="output" path="bin"/></classpath>
<?xml version="1.0" encoding="UTF-8"?><classpath><classpathentry kind="src" path="src"/><classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/><classpathentry combineaccessrules="false" kind="src" path="/Test2"/><classpathentry combineaccessrules="false" kind="src" path="/Test1"/><classpathentry kind="output" path="bin"/></classpath>
 

热点排行