[英]Java Generic Type new instance
public class PairT <T>{
public T first;
public T second;
public T getFirst() {
return first;
}
public void setFirst(T first) {
this.first = first;
}
public T getSecond() {
return second;
}
public void setSecond(T second) {
this.second = second;
}
public PairT(T first, T second) {
this.first = first;
this.second = second;
}
public PairT() {
}
這兩種makePair
方法本質上有什么區別? 為什么第二個在語法上是非法的?
第一:
public static <U> PairT<U> makePair(Class<U> cl) throws Exception {
return new PairT<U>(cl.getConstructor().newInstance(),
cl.getConstructor().newInstance());
}
第二:
public static <U> PairT<U> makePair(U cl) throws Exception {
return new PairT<U(
cl.getClass().getConstructor().newInstance(),
cl.getClass().getConstructor().newInstance());
}
Object.getClass()
返回Class<?>
,因此您需要強制轉換。 makePair2
直接這樣做,但最后, makePair3
使用getClass
來隔離需要強制轉換的位置。
public static <U> PairT<U> makePair1(Class<U> cl) throws Exception {
return new PairT<U>(cl.getConstructor().newInstance(),
cl.getConstructor().newInstance());
}
public static <U> PairT<U> makePair2(U cl) throws Exception {
return new PairT<U>(
(U) cl.getClass().getConstructor().newInstance(),
(U) cl.getClass().getConstructor().newInstance());
}
private static <U> Class<U> getClass(U u) {
return (Class<U>) u.getClass();
}
public static <U> PairT<U> makePair3(U cl) throws Exception {
return new PairT<U>(
getClass(cl).getConstructor().newInstance(),
getClass(cl).getConstructor().newInstance());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.