我无法理解源代码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)
这行检查是什么?
(Object)newType == (Object)Object[].class
Run Code Online (Sandbox Code Playgroud)(T[]) new Object[newLength]和之间有什么区别(T[]) Array.newInstance(newType.getComponentType(), newLength)?为什么Array.newInstance两种情况都不够好?
以下行编译,但在运行时崩溃(如预期的那样).我什么时候应该使用这种方法?
Integer[] nums = Arrays.copyOf(new String[]{"a", "b"}, 2, Integer[].class)
Run Code Online (Sandbox Code Playgroud)我无法想象我需要RoundingMode.HALF_EVEN在Java中使用的情况.
这种舍入模式是什么?我什么时候想用它?
请给我一些真实世界的例子.
我正在尝试通过阅读以下内容来学习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,并找到了以下代码.
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)