java - java中的自定义通用集合Trim类

标签 java generics collections

我有一个场景,我想将相同的逻辑应用于不同的类型。

interface TrimAlgo<T> { 
public List<T> trim(List<T> input);
}

class SizeBasedTrim<T> implements TrimAlgo<T> { 
    private final int size;
    public SizeBasedTrim(int size) { 
        this.size = size; 
    }

    @Override 
    public List<T> trim(List<T> input) { 
         // check for error conditions, size < input.size etc. 
         return input.subList(0, size);
    }
} 

// Will have some other type of TrimAlgo

class Test { 
    private TrimAlgo<?> trimAlgo; 
    public Test(TrimAlgo<?> trimAlgo) { 
       this.trimAlgo = trimAlgo; 
    }

    public void callForString() { 
       List<String> testString = new ArrayList<String>(); 
       testString.add("1");
       trimAlgo.trim(testString); // Error The method get(List<capture#3-of ?>) in the type TrimAlgo<capture#3-of ?> is not applicable for the arguments (List<String>)
    }

    public void callForInt() { 
       // create int list and call trim on it
    }
} 

有什么办法可以实现这一点吗?请告诉我。谢谢!

最佳答案

在我看来,你需要制作 trim()通用方法而不是 TrimAlgo类:

interface TrimAlgo { 
    <T> List<T> trim(List<T> input);
}

毕竟,您的修剪算法本身并不取决于类型 - 您可以使用同一实例来修剪 List<String>和一个 List<Integer> .

关于java - java中的自定义通用集合Trim类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089295/

相关文章:

java - 如何编写 JUnit 测试用例来查找流中的第一个非重复字符?

java - Android ACTION_IMAGE_CAPTURE 有时不调用 onActivityResult

java - 如何处理spring Controller 参数类型异常

java - 通过 Jackson 反序列化通用对象时出错

c# - 从 PropertyInfo 创建通用列表 <Type>

arrays - Node +蒙戈: adding record to array inside collection

java - ConcurrentHashMap 中的故障安全迭代器

Java 内部类

java - LinkedList 的 add 方法(带有父类(super class)型)不是一切都好吗?

C# 集合继承