【java】一个项目有两个相同的类,会出问题么?

是这样的,我现在有个A项目,A项目本身内部有一个类ClassA,但是ClassA是以jar方式引入的依赖,里面有个一个方法叫make()

ClassA的包名是,com.make.util

但是,A项目的另一个jar依赖里面有一个类ClassB,用到了ClassA的make方法,两个类我都没有方法改变

现在的需求是,客户要求改变make的方法实现(返回值和入参不变)

我的leader给我的建议是在项目中再新建一个和ClassA一样的类,就是包名,类名,方法名都一样

姑且叫他ClassC,说是这样ClassB调用make方法的时候会用这个新的,这样是可行的么

(背景:买了一个商用项目做二次开发,make方法是商用项目里依赖的东西,所以不能改,但是现在有这个需求)


简单说:两个一模一样的类(包名相同,类名相同,方法名相同,实现不同)
一个在maven的依赖里面,一个是在当前项目里面新写的,那么底层程序引入这个类,实际上用的是那个?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
经过自己测试,总是会用自己新建的那个类

-4

5个回答

jvm 在判断是否是重复类是根据这个类是由哪个类加载器加载来判断,
理论上来说你这样做没有问题,因为你依赖的jar包中的ClassA 和你自己创建的ClassA是由不同的类加载器加载的

0

这个应该跟jvm加载class文件顺序有关,可以了解一下这方面的东西,在代码中强制jvm最先加载新创建的ClassC类的方式比较靠谱。

或者为啥不直接把jar压缩包打开,直接把新编译好的ClassC的class文件直接替换呢?

建议:https://blog.csdn.net/eff666/article/details/52203406

加载器介绍 、类加载器的顺序 这两部分介绍的很详细了。

0

新建类导包时会让你选择哪个包下的那个类, 所以说市面上那么多重复类名都不存在问题,你这才哪到哪啊!

0

理论上不会,在项目引入包的时候就已经包含很多类了,但是我们创建自己的类时,基本没有重名提醒之类的,正如楼上所说的跟类加载器有关,同一工作域下倒也不太可能出现相同的类。创建时就会有警告吧

0

不会呀,只要前面的包名不一样就行了。例如 com.demo.util.HelloDemo 和 com.demo.model.HelloDemo 是两个类来的。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
两个不同包里有相同的类
今天刚开始看《java编程思想》第六章——访问权限控制,想到了一个问题,就是你导入了两个不同的包,包里面有相同名字的类,会怎样? 有这么几种情况(我用的是JDK8): 1.导入两个包,但不调用这个类 首先创建两个包,我创建的是Dome 和 Dome05,里面都有Dome01这个类, Dome05包里面有Dome03类 package Dome06; import Dome05.*; imp...
关于两个jar包中存在包名和类名都完全相同的jar包冲突问题
    这个问题是真的搞死人,找了好久找到对应jar中的@Autowired类,由于jdk自带的jfr.jar中也有Producer.class,与我自己写的jar包的冲突,搞得我把pom文件中的引用差不多都删完了,还不行。。最后百度发现是是编译器的执行顺序的问题,在Eclipse中是在Java Build Path-》Order and Export里面,通过"up"/"down"按钮改变顺序,...
关于两个jar包中存在包名和类名都完全相同的问题
引入的依赖包中,如果两个jar包中存在相同的包名和类名,那么就会出现问题,2个jar包中存在相同的全限定名类
两个jar包下相同包名类名引入冲突
有时候引入的jar包中的包名类名与其他jar包中的包名类名相同,导致程序在编译或运行的时候无法正确引用想要的类,现有一种解决方法就是去掉其中不需要的那个jar包      有一个项目下需要用到OpenCV和javacv,但是javacv中已经包含了另一个版本的的openCV,这与我们需要的OpenCV版本不一致, 但是编译和运行的时候程序引入的是我们不需要的版本    1.查看mave...
maven项目由于多个依赖中含有同一个jar包导致的冲突问题的解决办法
今天在利用mapreduce对HBase进行输入输出的时候,发生了一件很无厘头的事情,我和同事写同样的代码,但是我成功了,而他却失败了,这就有点让人头疼。一开始我们以为是配置的问题,但是经过比对,配置并没有什么不同。因此,我就将mapreduce的执行过程看了一遍,结果发现,他的org.apache.hadoop.conf.Configuration 类和我的org.apache.hadoop.c
idea,多个应用或者项目下有同名的class,debug进错了,切换方法
file–>settings–>build,execution,deployment–>debugger 把show alternative source switcher 勾上; 再执行debug,在编辑界面有下拉选项,选择你要debug的class,完成; ...
Tomcat部署两个相同项目问题
解决方案: 在启动出现错误的工程web.xml增加如下语句便可 webAppRootKey app.root 参考链接:http://blog.csdn.net/downloadsunlight2009/article/details/7514634
springboot项目中有两个相同的配置类,使用注解@ConditionalOnProperty控制其哪一个生效的方法
//第一个配置类 @Configuration @ConditionalOnProperty(value = "spring.swagger.enable", havingValue = "false") @EnableSwagger2 public class MySwagerConfig{ } //第二个配置类 @Configuration @ConditionalOnPrope...
【Java】jar包中 类名相同
如果类路径下有两个全限定名完全相同的类,而且另一个类import了这个全限定名,会怎么样? 下面验证下: import com.liyao.lib.Util; public class Main{ public static void main(String args[]){ System.out.println(new Util().getData()); } } 这是主类Mai...
不同的包下有文件名相同的java类,spring自动注入会报错
今天闲的蛋疼,做了一下spring自动注入的例子: 看看spring自动注入的是否可以区别出不同包下相同名字的java类,答案是不能,spring居然这么渣。 整体结构图如下: 1:首先建立两个同名的java类和接口 com.a包下面有一个IAutoInject接口和实现类AutoInject,同理com.b包下面也有相同的接口和实现类。 同时加上spring声明bean的注解,
html页面中,ID不要有多个,不然jquery会出现莫名其妙的问题。ID相同的有多个,jquery的根据ID取值,会有意想不到的错误、莫名其妙的错误
html页面中,ID不要有多个,不然jquery会出现莫名其妙的问题。ID相同的有多个,jquery的根据ID取值,会有意想不到的错误、莫名其妙的错误 假设ID为test的有两个。 如果使用$("#test"),有时候获取到两个对象,有时候获取到一个对象,没谱,让人感觉莫名其妙。 而$("[id=test]"),任何时候都是获取到两个对象。 所以,不要使用$("#tes
两个在不同包下的 相同的实体类, 为怎么不能同时在hibernate.cfg.xml 中配置?
项目结构: hibernate.cfg.xml 为什么会报: org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/baidu/hibernate/oneTOone/primary/Department.hbm.xml
Java - 一个类实现的多个接口,有相同签名的default方法会怎么办
Java - 一个类实现的多个接口,有相同签名的default方法会怎么办 public interface A { default void hello() { System.out.println("Hello from A"); } } public interface B extends A { default void hello() { ...
jvm加载包名和类名相同的类的规则,以及如何加载包名和类名相同的类
jvm包括三种类加载器: 第一种:bootstrap classloader:加载java的核心类。 第二种:extension classloader:负责加载jre的扩展目录中的jar包。 第三种:它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性或者 CLASSPATH操作系统属性所指定的JAR类包和类路径。 以上参考博客
一个类实现多个具有相同方法的接口
       今天,我的一个同事突然间问我一个问题:“如果有一个类,实现了多个接口,这些接口里面有形同的方法,会出现什么情况?”。我感觉这个问题挺有意思(薄弱的java基础啊!),于是简单的写了几个接口和类,看看会有什么情况发生;   第一个接口的内容:   public interface Angel { public abstract void say(); public ab...
Java中一个类怎么实现两个接口中相同名字的抽象方法
看 HeadFirst Java 时,作者说,为了解决多重继承所引起的“致命方块问题” 所以我们 Java 不用多重继承,用多重实现,but,如果实现了两个接口中,有相同名字的抽象方法,那不还是避免不了所谓的“致命方块”吗?Friend 接口:public interface Friend { public abstract void play() ; public abstra
两个实体不是同个类同名字段赋值问题
实际生产过程中,我们经常会遇到。两个不同对象,但是大多数属性相同,如何快速赋值的问题。如果用get set,既显得代码臃肿,又容易忘记赋值某条属性。如果两个实体不是同一个类,将同名字段的值从一个赋给另一个,建议使用: //把audi赋给car BeanUtils.copyProperties(car, audi); ...
在同一个Tomcat下部署多个SpringMVC相同项目
Host配置 修改每个项目里面的Web.xml和log4j.properties(每一个相对应)          修改Tomcat配置 新建文件夹(shared\lib) 修改Tomcat中confàcatalina.properties 将项目lib中的Jar包全部拷贝至shared/lib文件夹下,并将其他项目中的Jar包全部删除
有关Eclipse svn 插件的坑
svn 导入安卓项目不能被识别为安卓项目原因分析 .project文件 没有正确的上传或不正确导致的项目不能被识别 案例 .project 文件来自项目主版本 ,迁出后不能识别为安卓项目<?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>YiDongGuanJia</name> <comment></
在java类中实现不同接口的同名方法时,该方法属于哪个接口?
一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的改实现方法属于哪个接口的呢?
安卓依赖多个库,导致有重复的包被引用处理办法
1. 查找具体重复引用的包, 全局搜索即可 2.查看具体被引用的类即可 3.自己想办法解决的吧
浅谈在JAR中同名类冲突问题
楔子 这段时间再给客户部署服务的时候,发现有一个服务在公司通过了所有测试,但是却在客户现场的生产环境上报出了一个诡异的问题。由于对出问题的那段代码不熟悉,所有前后折腾了2个小时才定位出来,原来是服务依赖的两个JAR包中都同时出现了一个同名类(该类的完全限定名一样),并且这两个类中都包含了同一个方法。在公司环境中执行的是正确的那个方法,而在客户现场执行的是错误的方法。这就导致了在公司没有问题的服务...
Java类加载器和JVM如何识别两个Java类相同
类加载器加载类的过程 :类加载器在尝试自己去查找某个类的字节代码并定义它时,会先代理给其父类加载器,由父类加载器先去尝试加载这个类,依次类推。在介绍代理模式背后的动机之前,首先需要说明一下 Java 虚拟机是如何判定两个 Java 类是相同的。Java 虚拟机不仅要看类的全名是否相同,还要看加载此类的类加载器是否一样。只有两者都相同的情况,才认为两个类是相同的。即便是同样的字节代码,被不同的类加...
一个类所实现的两个不同的接口中,有同名的方法,怎么知道实现的是哪个接口中的方法...
今天遇到一个问题,代码(后面各个版本的代码都是基于此代码进行变更的)如下:   public interface Type1 { void f(); void f1(); void f11(); }       public interface Type2 { void f(); void f2(); void f22(); }   ...
依赖多个项目,重复jar包不同版本冲突解决
    当依赖多个项目时,很多额外的jar都会依赖进来,可能会因版本不一样导致jar包冲突,例如Hibernate跟servlet的包冲突,或者其他情况的情况。如果是使用的maven管理jar,则非常好解决,使用maven dependency的exclusions的用法便可以不间接引入不想引入的包,这样便可以解决。 &amp;lt;dependency&amp;gt; ...
用反射实现两个类的对象之间相同属性的值的复制
/// &amp;lt;summary&amp;gt; /// 反射实现两个类的对象之间相同属性的值的复制 /// 适用于没有新建实体之间 /// &amp;lt;/summary&amp;gt; /// &amp;lt;typeparam name=&quot;D&quot;&amp;gt;返回的实体&amp;lt;/typeparam&amp;gt; /// &amp;lt;typepa...
多个so库合并到一起,出现问题,解决办法
讯飞的so库,gifdrawable的so库在一个项目中,合并到一起,出现问题。gif动画闪退。 在网上到处找答案。终于找到一个方法:"我只保留了lib下的2个文件夹 armeabi和armeabi-v7a" 就解决了这个问题
java学习笔记015:不同包的两个同名类,同时导入一个类是报错,怎么办???
今天工作的时候遇到一个小问题: 解决办法: 导入一个,另外一个用全路径访问。 例如同时用到了java.util.Date和java.sql.Date 那么只需要import java.util.Date; 定义import java.util.Date变量时直接使用 Date d = new Date(); 定义java.sql.Date时则写成 java.sql.Date d1 = new ...
同一个包下不同java文件里不能有同名类,私有的也不可以
rt
JAVA不同类相同属性的赋值(伪深度克隆)
关于浅克隆与深克隆网上都有很多代码,但克隆的是相同类型的类,那么如果两个类是不同的类,而属性的值又是一样的该怎么赋值呢! 我们可以定义一个父类Entity(名字随便你们怎么定义),实现Cloneable接口,重写clone()方法 ,用于相同类的克隆,再定义一个cloneTo(Class clazz)方法就可以赋值给另外一个类了,具体看代码: package com.aiitec.test; im
两个jar包以及自己代码中出现相同包名及类名的类
类加载顺序测试   testjar1.jar package com; public class TestJar { public String getVersion() { return &quot;v1&quot;; } }     testjar2.jar package com; public class TestJar { public String get...
不同jar完全相同的包名和类名的加载问题【已解决】
类的加载与jar的导入顺序有关。只会加载第一个。
不同包的两个同名类,同时导入一个类是报错,怎么办?
JAVA中不同包的两个同名类,同时导入一个类是报错,怎么办?问题描述解决办法 问题描述 在写爬虫时,同一个类中需要import org.jsoup.nodes.Document与org.bson.Document这两个类,但是报错了,同一个类中不能有两个同名的类。 解决办法 仅仅导入一个,或者不导入这两个包,需要调用时使用全部路径,即如下所示: org.jsoup.nodes.Document d...
Eclipse中如何同时导入两个相同的项目
打开项目中的.project文件,这个文件保存着描述这个项目的基本信息,只需在复制之后的项目对应的.project文件中修改&amp;lt;name&amp;gt;****&amp;lt;/name&amp;gt;标签&amp;lt;name&amp;gt;****&amp;lt;/name&amp;gt;中的信息即可...
Java将两个JavaBean里相同的字段自动填充
最近因为经常会操作讲两个JavaBean之间相同的字段互相填充,所以就写了个偷懒的方法。记录一下  /** * 将两个JavaBean里相同的字段自动填充 * @param dto 参数对象 * @param obj 待填充的对象 */ public static void autoFillEqFields(Object dto, Object obj) { try { ...
两个实体(有相同字段)如何赋值
  a中字段 id  name   b中字段 id name sex  import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(a, b);   将a中有与b相同的字段直接赋值给b  
刚刚大学毕业,自己搭网站遇到的问题 一:tomcat中同时部署两个项目的问题
最近直接把两个项目打成war包在tomcat下发布,出现了很多莫名奇妙的问题,就是不能发布成功,只能有一个项目能成功,在网上查了很多方法,以为是两个项目中jar包出现冲突,也按照网上的方法把两个项目中相同的jar包找出来放在了tomcat的lib目录下。结果还是不管用,只能启动一个,另外一个被中断。 最后为了测试,我把2个项目都放在eclip...
使用URLClassLoader加载不同Jar包中的相同包名相同类名的类
使用URLClassLoader加载不同Jar包中的相同包名相同类名的类 开发中会遇到这种情况,使用一项功能需要依赖jar,然而一段时间后这些包升级,包名和类名均不变的情况下功能发生变化。旧的jar依然需要使用,而新功能却需要使用新升级的jar。这时如果依赖两个包,使用时会造成冲突。因此需要进行jar隔离。有很多的隔离框架可以使用,如jarlinks。本文将演示通过URLClassLoader加...
iOS运行项目出现多个同名文件冲突的编译报错
今天刚刚入职 从git上下载下来代码后,编译程序出现一大溜的报错 multiple commands produce xxx.txt (xxx代表一长串地址路径)。 不要慌 解决方法一: 修改为不同类型的文件名或删除这些文件,但是这里要注意在项目中要用到这些文件的话,修改文件名要注意修改项目代码。 方法二: 如下图所示 找到项目中build Phases —&amp;gt; copy bundle...
java判断两个对象的类型是否相同以及判断对象是否属于某个类
public class Test{ public static void main(String[] args) { //测试两个对象是否相同 String s1 = new String(&amp;amp;quot;aaa&amp;amp;quot;); String s2 = new String(&amp;amp;quot;bbb&amp;amp;quot;); System.out.println(s1 instanceof s2); // false ...