<T>和<?>区别

简介: 简要讲述一下<T>和<?>区别,以及<T>的用法

<T>和<?>的区别

<T>用于泛型类型的声明

<?>用于方法的接受参数或者是返回类型

大部分情况下如果要进行方法的参数接收会考虑使用<?>,它的特点是可以保证程序不出现不必要的修改。

举例Demo.java

package com.project.web.controller.common;
//现在这个 T 表示需要设置一个泛型来定义 msg 属性类型
class Message<T> {
    private T msg;
    public void setMsg(T msg) {
        this.msg = msg;
    }
    public T getMsg(){
        return msg;
    }
}
public class Demo {
    public static void main (String []args) {
        Message<String> msg = new Message<String>();
        /*因为泛型可以设置所有的类型,所以面对于当前的开发环境就发现 fun() 方法将出现问题,
        也就是说如果 Message 使用的时候设置的不是 String,那么就有可能无法使用。*/
        msg.setMsg("Hello");
        //可以接收所有的 Message 定义的泛型类型
        fun(msg);
    }
    //使用"类 <?>" 表示只能取得内容,但不允许设置内容
    public static void fun(Message<?> temp) {
        //无法设置
        //temp.setMsg("AASAA");
        System.out.println(temp.getMsg());
    }
}

<T>的用法举例

运行结果

image.png

代码demo2.java及注释如下:

package com.project.web.controller.common;
//创建接口
interface IMessage {
    void send(String msg);
}
//创建接口实现类
class TextMessage implements IMessage {
    @Override
    public void send(String msg) {
        System.out.println("[send msg]:"+msg);
    }
}
//创建工厂类
class Factory {
    public static IMessage getInstance(String className) {
        return new TextMessage();
    }
}
//利用泛型创建的工厂类
class Factory2 {
    public static <T> T getInstance (Class<T> clas) throws Exception {
        return clas.newInstance();
    }
}
public class Demo2 {
    public static void main(String[] args) throws Exception {
        //Factory 工厂只能为一个接口IMessage服务,日常应是会有很多个接口对象通过工厂获得
        IMessage hello = Factory.getInstance("hello");
        hello.send("hello world");
        //泛型工厂类创建对象,可以根据传入不同的类名.class获取对应的对象
        TextMessage instance = Factory2.getInstance(TextMessage.class);
        instance.send("hello world 2");
    }
}
相关文章
|
1月前
|
存储 C语言 C++
1. 认识C++和C的区别
1. 认识C++和C的区别
44 0
|
12天前
MTP3 和 MTP3B 的区别
【4月更文挑战第11天】
14 0
MTP3 和 MTP3B 的区别
|
8月前
|
算法 Java Unix
C++基础语言之(二)C和C++的区别
C++基础语言之(二)C和C++的区别
|
8月前
for in 和 for of的区别
for in 和 for of的区别
82 1
|
JavaScript 前端开发 索引
for...in和for...of的区别
前言 在JavaScript中遍历数组通常是使用for...i循环,在ES5具有遍历数组功能的还有forEach、map、filter、some、every、reduce、reduceRight等。 for...in和for...of是两种增强型循环,for...in是ES5标准,在ES6中新增了for...of的循环方式。
84 0
for...in和for...of的区别
backgroundColor与 tintColors的区别
backgroundColor与 tintColors的区别
92 0
backgroundColor与 tintColors的区别
@EnableEurekaClient上有@EnableDiscoveryClient区别
@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是其他注册中心。
905 0
|
JavaScript 前端开发