Java:如何将 Arrays.copyOfRange() 与泛型类型一起使用?

山姆胡珀

我正在尝试创建一个名为“sub”的方法,该方法在将字符串作为第一个参数传递时返回一个子字符串,在将数组作为第一个参数传递时返回一个子数组。例如:

sub("hello", 1, 3) 返回 "el"

sub(new String[]{"a","b","c","d"}, 1, 3) 返回一个包含 {"b","c"}

sub(new Integer[]{1,2,3,4}, 0, 2) 返回一个包含 {1,2}

我已经让 String 部分工作了,但我无法弄清楚数组部分。到目前为止,这是我的代码(我假设开始和结束索引是有效的):

public static <T extends Object> T sub(T obj, int start, int end){
        if(obj instanceof String){
            return ((T) (((String) obj).substring(start, end)));
        }
        else if(obj != null && obj.getClass().isArray()){
            return (???)
        }
        else return null;
    }

我想使用 Arrays.copyOfRange() 来创建子数组,但我如何创建它并不重要。

以下是我尝试过的所有替代return (???)语句的方法:

return Arrays.copyOfRange(obj, start, end);
return (T) Arrays.copyOfRange(obj, start, end);
return (T) Arrays.copyOfRange(obj, start, end, T);

对此的任何帮助将不胜感激。我对使用泛型很陌生,所以如果这对它们来说是不可能的,我很抱歉。如果您在我的代码中发现任何其他缺陷,请毫不犹豫地指出它们。谢谢!

阿兹罗

一个工作版本可能如下,但我不太相信这是最好的方法,但它现在可能对你有帮助,或者其他人可以用它来改进它:

private static <T> T sub(T obj, int start, int end) {
    if (obj instanceof String) {
        String v = (String) obj;
        return (T) v.substring(start, end);
    } else if (obj != null && obj.getClass().isArray()) {
        Object[] v = (Object[]) obj;
        return (T) Arrays.copyOfRange(v, start, end);
    } else {
        return null;
    }
}


public static void main(String[] args) {
    System.out.println(sub("hello", 1, 3));                                          // el
    System.out.println(Arrays.toString(sub(new String[]{"a", "b", "c", "d"}, 1, 3)));//[b,c]
    System.out.println(Arrays.toString(sub(new Integer[]{1, 2, 3, 4}, 0, 2)));       //[1,2]
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Swift协议与泛型方法和泛型类型一起使用

Java中的Arrays.copyOfRange方法抛出错误的异常

TypeScript:将映射类型与泛型一起使用

将联合类型与泛型一起使用

在将泛型引用类型与泛型类型一起使用时收到警告

如何将DataContractJsonSerializer与泛型一起使用

如何在不声明泛型类型的情况下将类与泛型一起使用

为什么StringBuffer的toString()方法使用Arrays.copyOfRange(value,0,count)?

Arrays.copyOfRange()的运行时

将泛型类型参数与`typeof T`一起使用

是否可以将命名元组与泛型类型声明一起使用?

将Java泛型与枚举一起使用

泛型类型如何在Scala中与继承一起使用?

C#泛型类:如何限制成员函数与特定类型一起使用?

将Hibernate与泛型一起使用

将Swift协议与泛型一起使用

将 TryInto 泛型与 anyhow::Error 一起使用

如何将Jackson与嵌套泛型一起使用?

如何将 Nim 的 `of` 运算符与泛型一起使用?

如何将泛型与多个耦合对象一起使用?

如何将人造丝的.par_iter()与泛型向量一起使用?

如何将 Array.map 与 typescript 泛型参数一起使用

如何将复合处理程序与嵌套开放式泛型一起使用?

如果在函数内创建引用,如何将泛型类型与需要使用生命周期参数的特征绑定在一起?

泛型和继承:将泛型与基类及其子类一起使用

C# 有没有办法将 DllImport 与泛型方法类型一起使用?

如果Java不支持参数化类型数组,那么Arrays.asList()如何与它们一起使用?

JDK 8的类型推断如何与泛型一起工作?

类型推断如何与重载泛型方法一起工作