关于java泛型的问题

lustboy 发布于 03/16 17:56
阅读 189
收藏 0

Serverless 架构就不要服务器了?>>>

现在有个需求,想要实现一个方法,方法的参数必须是某个类型的子类,例如:

有一个类Perosn p;

定义一个方法 funA( '这里的参数必须是Person的子类' )

请问这种需求怎么实现

加载中
0
tcxu
tcxu

子类与父类是  "is a"  的关系。比如说,人 ( class Person ) 的子类(subclass,  或叫做 派生类 derived class)有 学生、工人、农民、以及软件开发者(Software_Developer)..., 当然,学生、工人、农民、以及软件开发者这些实体, 必然都是人。说句玩笑话: 楼主 lustboy 是 一位 软件开发者(的实体)。请问:"lustboy 是不是人(Person的实体)?" 回答也一样 "是个人"。于是,这里所谓的泛型就可以写成     
public static <E> void funA( E s )。不过,这么一来,参数也包括父类的对象。按楼主的要求 “必须是某个类型的子类”, 楼上 zh0 才是正解。
下列代码,说明这一点。

import java.io.*;
import java.util.*;

class Person{
String name;
public Person(String name){
	this.name=name;
	}
}

class Developer extends Person{
 String language;
 public Developer(String name,String language){
 	super(name);
 	this.language=language;
 }
 public String toString(){
 	String s = "姓名: " + name;
 	s += ", 开发语言:" + language; 
 	return s;
 }
}

public class C {
	
	public static <T extends Person> void funA(T t){
		   System.out.println(t);
		};
	public static void main(String args[]){
		Developer s = new Developer("lustboy","Java");
		funA(s);
	}
}

输出:

姓名: lustboy, 开发语言:Java

 

2
zh0
zh0

<T extends Person> funA(T t);

0
湖水没了
湖水没了

这种情况不用泛型 直接 public static void funA(Person t) 也可以的

0
lustboy
lustboy

引用来自“tcxu”的评论

子类与父类是  "is a"  的关系。比如说,人 ( class Person ) 的子类(subclass,  或叫做 派生类 derived class)有 学生、工人、农民、以及软件开发者(Software_Developer)..., 当然,学生、工人、农民、以及软件开发者这些实体, 必然都是人。说句玩笑话: 楼主 lustboy 是 一位 软件开发者(的实体)。请问:"lustboy 是不是人(Person的实体)?" 回答也一样 "是个人"。于是,这里所谓的泛型就可以写成     
public static <E> void funA( E s )。不过,这么一来,参数也包括父类的对象。按楼主的要求 “必须是某个类型的子类”, 楼上 zh0 才是正解。
下列代码,说明这一点。

import java.io.*;
import java.util.*;

class Person{
String name;
public Person(String name){
	this.name=name;
	}
}

class Developer extends Person{
 String language;
 public Developer(String name,String language){
 	super(name);
 	this.language=language;
 }
 public String toString(){
 	String s = "姓名: " + name;
 	s += ", 开发语言:" + language; 
 	return s;
 }
}

public class C {
	
	public static <T extends Person> void funA(T t){
		   System.out.println(t);
		};
	public static void main(String args[]){
		Developer s = new Developer("lustboy","Java");
		funA(s);
	}
}

输出:

姓名: lustboy, 开发语言:Java

 

多谢,刚才想明白了,泛型只是约束的接口的参数边界,但是调用该方法的时候还是可以传递该类的子类的

返回顶部
顶部