gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:36:42 24 4
gpt4 key购买 nike

我正在尝试创建一个名为“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} 的整数数组

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

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]
}

关于Java:如何将 Arrays.copyOfRange() 与泛型类型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57450365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com