命名规则
问题引入
package practice;
class Point{
private Object x;
private Object y;
public void setX(Object x) {
this.x = x;
}
public Object getX() {
return x;
}
public void setY(Object y) {
this.y = y;
}
public Object getY() {
return y;
}
}
public class fanxing {
public static void main(String []args){
Point p = new Point();
p.setX(10);
p.setY(20);
int x = (Integer)p.getX();
int y = (Integer)p.getY();
System.out.println("X的坐标:"+x+";"+"Y的坐标:"+y);
}
}
---------------------------------
package practice;
class Point{
private Object x;
private Object y;
public void setX(Object x) {
this.x = x;
}
public Object getX() {
return x;
}
public void setY(Object y) {
this.y = y;
}
public Object getY() {
return y;
}
}
public class fanxing {
public static void main(String []args){
Point p = new Point();
p.setX(10);
p.setY("20"); //如果不用泛型,两个互不相干的类会出现
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at practice.fanxing.main(fanxing.java:24)的错误
int x = (Integer)p.getX();
int y = (Integer)p.getY();
System.out.println("X的坐标:"+x+";"+"Y的坐标:"+y);
}
}
泛型引入
package practice;
class Point<T>{
private T x;
private T y;
public void setX(T x) {
this.x = x;
}
public T getX() {
return x;
}
public void setY(T y) {
this.y = y;
}
public T getY() {
return y;
}
}
public class fanxing {
public static void main(String []args){
Point<String> p = new Point<String>(); //<String>只能是引用数据类型,不能是基本数据类型
p.setX("10");
p.setY("20");
String x = p.getX();
String y = p.getY();
System.out.println("X的坐标:"+x+";"+"Y的坐标:"+y);
}
}
如果使用泛型类或接口的时候,用Object
package practice;
class Point<T>{
private T x;
private T y;
public void setX(T x) {
this.x = x;
}
public T getX() {
return x;
}
public void setY(T y) {
this.y = y;
}
public T getY() {
return y;
}
}
public class fanxing {
public static void main(String []args){
Point p = new Point(); //统一Object
p.setX("10");
p.setY("20");
String x = (String)p.getX(); //需转型
String y = (String)p.getY(); //需转型
System.out.println("X的坐标:"+x+";"+"Y的坐标:"+y);
}
}
通配符
package practice;
class Point<T>{
private T x;
public void setX(T x) {
this.x = x;
}
public T getX() {
return x;
}
}
public class fanxing {
public static void main(String []args){
Point<String> p = new Point<String>();
p.setX("Hello World!!!");
fun(p);
}
public static void fun(Point<String> m){ //Point<String> m 中的Ponit需要与类名一致
System.out.println(m.getX());
}
}
不设置方法类型
package practice;
class Point<T>{
private T x;
public void setX(T x) {
this.x = x;
}
public T getX() {
return x;
}
}
public class fanxing {
public static void main(String []args){
Point<Integer> p = new Point<Integer>();
p.setX(30);
fun(p);
}
public static void fun(Point m){ //去掉<Integer>,解决不同参数类型的影响
System.out.println(m.getX());
}
}
泛型接口
定义接口泛型
package cn.fovegage.prac;
interface IMessage<T>{
public void print(T t);
}
public class FanXing {
public static void mian(String []args){
}
}
在子类继续设置泛型
package cn.fovegage.prac;
interface IMessage<T>{
public void print(T t);
}
class MessageImpl<T> implements IMessage<T>{
@Override
public void print(T t) {
// TODO Auto-generated method stub
System.out.println(t);
}
}
public class FanXing {
public static void main(String []args){
IMessage<String> msg = new MessageImpl<String>();
msg.print("Hello World!!!");
}
}
在子类不设置泛型。而为父接口明确的定义一个泛型类型
package cn.fovegage.prac;
interface IMessage<T>{
public void print(T t);
}
class MessageImpl implements IMessage<String>{
@Override
public void print(String t) {
// TODO Auto-generated method stub
System.out.println(t);
}
}
public class FanXing {
public static void main(String []args){
IMessage<String> msg = new MessageImpl();
msg.print("Hello World!!!");
}
}
泛型方法
package cn.fovegage.prac;
public class FanXing {
public static void main(String []args){
String str = fun("Hello World!!!");
System.out.println(str.length());
}
public static <T> T fun(T t){
return t;
}
}