作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个名为“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/
我是一名优秀的程序员,十分优秀!