我创建了一个通用方法toList():
public static <T> List<T> toList(T... args){
List<T> list = new ArrayList<T>();
for (T t : args) {
list.add(t);
}
if(list instanceof Comparable<?>){
System.out.println("The list was considered a list of Comparable objects");
}
if(list instanceof Serializable){
System.out.println("The list was considered a list of Serializable objects");
}
if(list instanceof Object){
System.out.println("The list was considered a list of Object class' objects");
}
return list;
}
我将此方法称为:
public static void main(String[] args) {
System.out.println(Generics.<Comparable>toList(1,2,"3"));
}
我期待着因为我提供了Comparable类型,所以第一个if条件将保持为真,而o / p将是第一个Comparable,然后是Object。 但令我惊讶的是,如果o / p是Serializable然后是Object,那么控制权不会先进入。
有人能否说明这背后的原因? 另外,我不清楚在访问修饰符之后在方法签名中应用T的概念。
我们已经提到了访问说明符,修饰符和返回类型。提供T的需要是什么?
答案 0 :(得分:5)
您正在列表对象上执行断言,而不是列表元素。
^20209[[:digit:]]{8}[[:digit:]]+(?=0{4})
如果列表本身实现list instanceof Comparable<?>
接口,则只会返回true
。
由于Comparable
是可序列化的,当然是一个对象,其他两个条件将评估为ArrayList
。
答案 1 :(得分:0)
在我看来,您要尝试的是在方法中测试元素类型 //var dataString = $(this).serializeArray();
if(memname==''||address==''||phonenumber==''||renewaldate==''||maxborrowlimit==''||status=='')
{
document.getElementById("display").innerHTML="Please Fill All The Fields";
}
else if(!validate4(memname))
{
document.getElementById("display").innerHTML="Please Enter Valid MemberName";
document.getElementById("name").focus();
}
else if(d<currentdate)
{
document.getElementById("display").innerHTML="Please Enter RenewalDate After t=The Current Date";
}
else if(!validatephonenumber(phonenumber))
{
document.getElementById("display").innerHTML="Please Enter Valid PhoneNumber";
document.getElementById("phno").focus();
}
else if(!validate5(maxborrowlimit))
{
document.getElementById("display").innerHTML="Please Enter Valid MaxBorrowLimit>0";
document.getElementById("maxborrowlimit").focus();
} else {
$.ajax({
type: "POST",
url: "db/memaddajax.php",
data: dataString,
cache: false,
success: function(result){
//alert("submitted"+result);
$('#display').html(result);
window.location.href="members.php";
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
e.preventDefault();
});
function validatephonenumber(phonenumber) {
var p=phonenumber;
var filter=/^[789]\d{9}$/;
if(filter.test(p)) {
return true;
}
else {
return false;
}
}
function validate4(memname)
{
var m=memname;
var filter=/^[A-Za-z ]+$/g;
if(filter.test(m)) {
return true;
}
else {
return false;
}
}
function validate5(maxborrowlimit) {
var a = maxborrowlimit;
var filter=/^[1-9][0-9]*$/;
if(filter.test(a)) {
return true;
}
else {
return false;
}
}
});
。因为type erasure (follow the link)你无法做到这一点。 T
的实际类型仅在编译时已知,而不是在运行时。在运行时,在方法内部,Java只会认为T
是T
。