小编Xin*_*Xin的帖子

不明白Arrays.copyOf的源代码

我无法理解源代码Arrays.copyOf.

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
    T[] copy = ((Object)newType == (Object)Object[].class)
        ? (T[]) new Object[newLength]
        : (T[]) Array.newInstance(newType.getComponentType(), newLength);
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}
Run Code Online (Sandbox Code Playgroud)
  1. 这行检查是什么?

    (Object)newType == (Object)Object[].class
    
    Run Code Online (Sandbox Code Playgroud)
  2. (T[]) new Object[newLength]和之间有什么区别(T[]) Array.newInstance(newType.getComponentType(), newLength)?为什么Array.newInstance两种情况都不够好?

  3. 以下行编译,但在运行时崩溃(如预期的那样).我什么时候应该使用这种方法?

    Integer[] nums = Arrays.copyOf(new String[]{"a", "b"}, 2, Integer[].class) 
    
    Run Code Online (Sandbox Code Playgroud)

java arrays generics

43
推荐指数
4
解决办法
3959
查看次数

什么是HALF_EVEN四舍五入?

我无法想象我需要RoundingMode.HALF_EVEN在Java中使用的情况.

这种舍入模式是什么?我什么时候想用它?

请给我一些真实世界的例子.

java rounding

22
推荐指数
4
解决办法
2万
查看次数

`copy(List <?super T> dest,List <?extends T> src)`和`copy(List <T> dest,List <?extends T> src)之间的区别

我正在尝试通过阅读以下内容来学习Java Generics通配符:http: //www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ103

材料中有一个例子:

public class Collections { 
  public static <T> void copy (List<? super T> dest, List<? extends T> src) {
      for (int i=0; i<src.size(); i++) 
        dest.set(i,src.get(i)); 
  } 
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以更改方法签名如下:

  public static <T> void copy(List<? super T> dest, List<? extends T> src) {
Run Code Online (Sandbox Code Playgroud)

  public static <T> void copy(List<T> dest, List<? extends T> src) {
Run Code Online (Sandbox Code Playgroud)

这两种方法是否存在差异?

例子将不胜感激.

java generics

8
推荐指数
2
解决办法
543
查看次数

调用具有不同T类的print(List <T> a,T b)时发生错误

我正在尝试学习Java Generics,并找到了以下代码.

public static <T> void print(T a, T b){
    System.out.println(a);
    System.out.println(b);
}

public static void main(String[] args){
    print(new ArrayList<String>(), 1);
}
Run Code Online (Sandbox Code Playgroud)

哪个没问题.

但是,当我将print方法更改为以下内容时,它会让我编译错误.

public static <T> void print(List<T> a, T b){
    System.out.println(a);
    System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)

错误:

GenericTest.java:9: error: method print in class GenericTest cannot be applied to given types;
  print(new ArrayList<String>(), 1);
    ^
  required: List<T>,T
  found: ArrayList<String>,int
  reason: no instance(s) of type variable(s) T exist so that argument type int conforms to formal parameter type T
  where T …
Run Code Online (Sandbox Code Playgroud)

java generics

5
推荐指数
2
解决办法
132
查看次数

标签 统计

java ×4

generics ×3

arrays ×1

rounding ×1