[英]Generic method works with different actual parameter
這里我有一個接受泛型類型參數T
的泛型方法
public static <T> boolean compare(T p1, T p2) {
return p1.equals(p2);
}
現在,如果我像下面這樣調用這個方法
compare(10, "");
它工作,但我認為它不應該工作,因為它只能接受一種類型的Type parameter
,那么推理算法如何在這里工作?
它的工作原理是因為Integer和String有共同的父對象,你沒有在類型T中指定任何約束。如果你寫:
public static <T extends Number> boolean compare(T p1, T p2) {
return p1.equals(p2);
}
你得到編譯時錯誤。
方法調用有效,因為您沒有約束類型T
,因為String
和Integer
都是java.lang.Object
子類型,它們是將被推斷的類型。
您的方法將編譯,而不是在運行時拋出任何異常。
原因是:
T extends CharSequence
等),所以任何Object
和“boxable”原語將在調用期間編譯為參數 equals
等於調用Object#equals
,因此不會拋出運行時異常。 false
將返回,因為參數之間的引用不相等 如果使用共享相同引用的對象調用方法,則它將打印為true
。
如果使用共享相同值的對象調用方法(例如兩個相等的String
),它將返回true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.