You need to enable JavaScript to run this app. Java如何实现泛型VariableStorage的set/get及ITextStorage的字符匹配计数?
优惠活动
大模型
产品
解决方案
定价
更多

Java如何实现泛型VariableStorage的set/get及ITextStorage的字符匹配计数?

实现步骤与可运行代码示例

一、实现VariableStorage类的set/get方法

现有代码的问题

  • 你之前在set方法内部定义的char T是局部变量,方法执行完成后就会被内存回收,完全无法在get方法中访问
  • 错误将类的泛型标识T作为普通变量类型定义,且变量名和泛型标识重名,存在语法错误

正确实现思路

要实现值的持久化存储,必须在类中定义与泛型类型一致的私有成员变量:set方法负责把传入的参数赋值给这个成员变量,get方法直接返回这个成员变量即可。

正确代码

public class VariableStorage<T> implements IVariableStorage<T> {
    // 私有成员变量,类型和类泛型T保持一致,用于持久化存储值
    private T storedValue;

    @Override
    public void set(T var) {
        this.storedValue = var;
    }

    @Override
    public T get() {
        return storedValue;
    }
}

二、实现ITextStorage接口

实现思路

因为ITextStorage继承自IVariableStorage,且泛型上界为CharSequence(即存储的内容一定是可转为字符序列的类型,如String、StringBuilder等),可以直接复用上面写好的VariableStorage的set/get逻辑,仅需额外实现countMatchingCharacters方法:

  • 分别取出当前对象、对比对象中存储的文本内容
  • 以两个文本的最小长度为遍历边界(超过短文本长度的位置不存在可对比的同位置字符)
  • 逐位置对比同下标的字符,相等则累加匹配计数

你之前尝试创建两个数组做对比属于不必要的冗余操作:CharSequence本身内置charAt(i)方法支持按下标直接取字符,无需转成数组即可完成对比。

实现代码

public class TextStorage<T extends CharSequence> extends VariableStorage<T> implements ITextStorage<T> {
    @Override
    public int countMatchingCharacters(ITextStorage<?> other) {
        CharSequence currentText = this.get();
        CharSequence otherText = other.get();

        // 空值边界处理,避免空指针异常
        if (currentText == null || otherText == null) {
            return 0;
        }

        int matchCount = 0;
        // 取两个文本的最小遍历长度,防止下标越界
        int compareMaxLength = Math.min(currentText.length(), otherText.length());

        for (int i = 0; i < compareMaxLength; i++) {
            if (currentText.charAt(i) == otherText.charAt(i)) {
                matchCount++;
            }
        }
        return matchCount;
    }
}

效果校验

以题目给出的示例abcdef和abba为例:

  • 可对比的最大长度为min(6,4)=4
  • 逐位对比结果:第0位a/a匹配、第1位b/b匹配、第2位c/b不匹配、第3位d/a不匹配
  • 最终返回匹配数2,和示例描述完全一致。

内容的提问来源于stack exchange,提问作者hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 03:15:03