java新建类,要重写的4个方法

本文介绍了一种针对特定格式的TSV文件进行排序的方法。通过分析文件名中的关键部分,如_Object或_Criteria之前的部分,实现文件的正序或逆序排列。该方法适用于需要对大量具有相似命名约定的文件进行组织和处理的场景。

//******************************************************
//
// G2Bシステム
// クラス名称:G2B2Lgc8310
// クラスの概要:G2B2Lgc8310 ファイル名でファイルをソートするには
//
// <<修正履歴>>
//    1    2011/07/12  1.00    BFS)BaiLingzhou    VSLP:Issues10)VSLPに関するALL PAGE DL 新規作成
//
// All Rights Reserved,
// Copyright (株) 日立製作所、(株) ピーアンドアイ、富士通 (株)
//
//******************************************************
package jp.co.nissan.g2b2.util;



/**
 * TSVファイルをソート
 * @version    1.00
 * @author    BFS)BaiLingzhou
 *
 */
public class G2B2UtlTsvFileName implements Comparable<G2B2UtlTsvFileName>
{
    private String frontName;
    
    private String endName;
    
    private String fileName;
    /**
     * TSVファイルクラスのConstructor
     * @param fileName    Oldファイル名
     */
    public G2B2UtlTsvFileName(String fileName)
    {
        // the position of "_Object" or "_Criteria"
        int position = fileName.indexOf("_Object")>0?fileName.indexOf("_Object"):fileName.indexOf("_Criteria");
        this.frontName = fileName.substring(0, position);
        this.endName   = fileName.substring(position,fileName.length());
        this.fileName  = fileName;
    }

    
    public String toString()
    {
        return this.fileName;
    }

    /**
     * 比較名前の前,等しい場合,順アレンジメント
     *             等しくない場合,逆アレンジメント
     * @param    ファイルの名前
     * @return    等しいか、等しくないか
     */
    @Override
    public int compareTo(G2B2UtlTsvFileName other)
    {
        // 名前の前、等しいか、等しくないか
        if(this.frontName.equals(other.frontName))
        {
            // 比較名前の後、等しいか、等しくないか
            return this.endName.compareTo(other.endName);
        }
        else
        {
            // 名前の前、等しいか、逆アレンジメント
            return other.frontName.compareTo(this.frontName);
        }
    }
    
    /**
     * equalsはObject定義されたメソッドなので、オーバーライドが必要のメソッドです
     */
    @Override
    public boolean equals(Object other)
    {
        G2B2UtlTsvFileName o;
        if(other instanceof G2B2UtlTsvFileName)
        {
            o = (G2B2UtlTsvFileName)other;
        }else{
            return false;
        }
        return this.fileName.equals(o.fileName);
    }
    
    /**
     * hashCodeはObject定義されたメソッドなので、オーバーライドが必要のメソッドです
     */
    @Override
    public int hashCode()
    {
        return this.fileName.hashCode();
    }
}

Java重写JAR包中的方法使其使用自定义实现,可以通过以下几种方式来实现: ### 1. **通过路径覆盖(Classpath Override)** Java加载机制中,加载器会优先加载路径(classpath)中靠前的文件。因此,如果在项目源码中创建一个与JAR包中**完全相同的包路径和名**,JVM会优先使用项目源码中的,从而覆盖JAR包中的原始。具体步骤如下: - 在项目源码中创建与JAR包中目标相同的包路径和名。 - 将JAR包中原的全部方法复制到新建中。 - 修改需要重写方法的实现逻辑,保持方法签名(方法名、参数型、返回型)不变。 - 编译运行项目时,JVM会优先加载源码中的,从而覆盖JAR包中的[^1]。 ### 2. **通过修改JAR包内容** 如果无法在源码中覆盖,可以直接修改JAR包中的文件重新打包。这种方法适用于无法修改源码结构或需要在多个项目中统一替换的场景。具体步骤如下: - 使用压缩工具(如WinRAR、7-Zip、Bandizip等)打开JAR包。 - 找到需要替换的文件(`.class`),将其从JAR包中删除。 - 将自定义编译好的`.class`文件复制到JAR包对应路径中。 - 保存重新打包JAR文件。 - 使用修改后的JAR包进行部署或构建[^3]。 ### 3. **使用Spring Boot的组件扫描排除机制** 在Spring Boot项目中,如果需要重写某个由依赖JAR包提供的Spring组件(如`@Component`、`@Service`等),可以通过组件扫描的排除机制来实现。例如,可以使用`@ComponentScan.Filter`来排除原始注册自定义实现。具体操作如下: - 创建与JAR包中目标相同的包路径和名,实现自定义逻辑。 - 在配置中使用`@ComponentScan`设置`excludeFilters`,排除原始。 - 注册自定义作为Spring Bean,以确保Spring容器使用自定义实现[^4]。 ### 4. **使用字节码增强技术(Bytecode Manipulation)** 对于更复杂的场景,例如在运行时动态修改的行为,可以使用字节码增强技术,如ASM、ByteBuddy或CGLIB等库。这些工具可以在加载时修改其字节码,从而改变方法的执行逻辑。例如,使用ByteBuddy可以编如下代码来拦截修改方法行为: ```java new ByteBuddy() .subclass(OriginalClass.class) .method(named("targetMethod")) .intercept(MethodDelegation.to(MyInterceptor.class)) .make() .load(OriginalClass.class.getClassLoader(), ClassReloadingStrategy.fromInstalledAgent()); ``` 上述代码通过`MethodDelegation`将`targetMethod`的调用委托给`MyInterceptor`,从而实现方法逻辑的动态替换。 ### 5. **使用Java Agent进行重定义** Java Agent可以在JVM启动时或运行时动态加载修改的字节码。通过`Instrumentation` API,可以使用`addTransformer`方法注册一个`ClassFileTransformer`,在加载时修改其字节码。这种方式适用于需要全局替换某些逻辑的场景,但实现复杂度较高。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值