Class类为什么可以带泛型

前几天刚看了下集合的知识,对泛型的理解是集合容器才使用泛型,Class不是容器吧,为什么可以使用泛型,原理是什么?

4个回答

所谓泛型就是说它里面的某些类型是“泛的”,就是具体使用时才确定的。根据这个中心思想就可以知道,其实只要有内嵌的类型就可以以泛型的形式出现。不仅类可以,函数也是可以的.

集合容器才使用泛型,谁说的?任何类都可以,你自己随便写一个没有任何功能的类也可以用泛型。

学习任何事物,我觉得有个基本原则你应该知道,我们可以管它叫“奥卡姆剃刀原理”。那就是任何事物都遵循最简单的规则而构成。
比如说如果如果Java语言的设计者规定,“集合容器才使用泛型”,那么他还得需要规定,什么样的类才算“集合容器”。“集合容器”这种类是在语法上必须特别表示出来呢?还是说编译器必须理解每个类的实现代码,判断它的用途是不是“集合容器”?很明显在Java中没有这样的特别的语法,这就很容易理解(即便你没有“看集合的知识”),这明显是错的。

泛型是一个java的新特性,限定类型

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java class反射指定实例化泛型类的<T>的问题
现在手里有两个class 一个A(泛型类) 一个B 我想通过实例化泛型类A来为其<.T>指定B这个类型 我该如何操作?
如何通过对象获取泛型类的实际参数类型?
一个通用的类,通过反射定义通用的方法,但是怎么在对象中获取泛型类中泛型定义的实际类型的Class呢? ``` public class GeneralClass<T>{ public void testMethod(){ 在此处如何获取T的Class对象clazz clazz.getDeclaredFields..... } } 使用通用类 GeneralClass<Date> gc=new GeneralClass<Date>(); gc.testMethod(); ``` 请问如何获取clazz?
如何获取java泛型的真实Class类型?
泛型继承自接口 示例 : 想获取泛型 K 和 V 的类型 ``` public class RedisCache<K, V> implements Cache<K, V> { public V get(K key) throws CacheException { Class value_clazz = ... //想要获取泛型V的真实class //... } } ``` 我使用 clazz.getGenericSuperclass的方式获取ParameterizedType但是强转失败 ``` Class clazz = this.getClass() ; Type gs_type = clazz.getGenericSuperclass(); ParameterizedType pt = (ParameterizedType)gs_type ; ``` 发生以下异常 : java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
java泛型类的一个小问题?
java中带有泛型的class在用到(new\extends\implements\作为函数参数等)他们时,如果不设置他们的泛型,而只是用该class的名字来操作,编译器会警告说“xxx is a raw type”,xxx是个原生类型,你应该设置一下它的泛型的类型。那有没有什么时候就是会用到raw type的?就是只需要这个class的名字,而不需要去设置他的泛型类型?
泛型
定义一个泛型类, 使用extends关键字限制该泛型的类型为List接口,并分别创建两个泛型对象。
Java怎么把一个Class作为一个泛型
Class<?> clazz = Class.forName("a"); Factory<clazz> factory = new Factory<clazz>(); 其中Factory<T extends XX>,clazz是继承XX的。 以上代码是错的,泛型不能是clazz。如何将得到的clazz的类型作为Factory泛型? 当前类和clazz的类没有任何关系。
关于java的匿名内部类和泛型
public class Counter { private static ThreadLocal<Integer> counterContext = new ThreadLocal<Integer>(){ protected synchronized Integer initialValue(){ return 10; } }; } 请教下上面这个类当中的这个匿名内部类起了什么作用,这个return 的10是传给了谁了呢?另外关于ThreadLocal<Integer>中的这个泛型的用法不是很理解,我对泛型的理解仅仅是 ArrayList<String>这类集合的泛型,说明里面只能存放String,对于ThreadLocal这种类的泛型又是什么意思呢?是ThreadLocal里面的某一个成员变量只能是Integer吗?
JAVA中的泛型,尖括号里可以装任意符号?
泛型的尖括号里不是装指定类型的嘛,那下面这句笔记怎么理解呢? 泛型的语法------》 Class Demo <泛型符号> { } //这里的泛型符号可以用任意符号,常用的符号有E(元素element简写),T(类 型type的简写),K(键key的简写),V(值value的简写)
JAVA 反射构造函数带泛型参数的类
JAVA 反射构造函数带泛型参数的类 比如说: ``` public class User<T extends Person> { private T rootType; public User(T rootType){ this.rootType = rootType; } @Override public String toString() { return "User [rootType=" + rootType + "]"; } } public class Work extends Person { @Override public String toString() { return "Work [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; } } public class Person { @Override public String toString() { return "Person []"; } } ``` 我想要构造一个User(work), 如何构造? ``` public static <T extends Person> T getInstance() { String className = "com.aaa.reflection.utils.User"; Class clazz; try { clazz = Class.forName(className); Constructor<?>[] cons = clazz.getConstructors(); Constructor<?> con = cons[0]; Object initargs = Work.class; T obj = (T) con.newInstance(initargs); System.out.println(obj.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } ```
关于创建Class泛型数组
已知 [code="java"] public class B implements A(){}; public class C implements A(){}; [/code] 为什么下面的代码不能编译通过 [code="java"]Class<? super A>[] claszz = new Class<? super A>[]{ B.class, C.class };[/code] 假如不使用泛型则可以编译通过 [code="java"]Class[] claszz = new Class[]{ B.class, C.class };[/code] 求解析
子类调用父类的泛型方法,为何不用强转就能得到正确的类型,父类编译的时候不是泛型擦出了吗?
以下面这个简单例子演示: 这是父类 ``` public abstract class GenericFather<T> { public T getT(T t){ return t; } } ``` 通过反编译可以得知编译后泛型擦出,T都用Object代替了 也就是说只要调用父类方法最后肯定返回的是个Object类型 ``` public abstract class GenericFather { public GenericFather() { } public Object getT(Object t) { return t; } } ``` 那么问题来了,为何子类调用父类方法时可以不用强转就得到正确的类型?问题到底出在哪里?
java 泛型类的构造函数,急急!!!
问题1. class demo<T> { demo<T z> { System.out.println(z); } } class temp { public static void main(String [] args) { demo <String>d=new demo<String> demo("csdn"); /*在这里我 如果 这样 为啥不报错 ,难道 泛型类的 构造函数不被泛型支配?*/ } } ``` ``` 问题2. class demo { public static void main(String [] args) { ArrayList al=new ArrayList(); al.add("csdn01");//他这里存进去的 是什么类型?String类型?Object? Iterator <String>it=al.iterator();//这里把数据传到迭代器过程中 是不是发生了类型转换,当我 写上al.add(4);我运行会报出 classcastException所以我觉得发生了类型转换 } }
为什么第一个Class必须带泛型,第二个就不需要?
@Pro(className = "com.test.annotation.Student",methodName = "study") public class ReflectTest { public static void main(String[] args) throws Exception { //1.解析注解 //获取该类的字节码对象 Class<ReflectTest> **reflectTestClass** = ReflectTest.class; //获取上面的注解对象 Pro pro = reflectTestClass.getAnnotation(Pro.class);//其实就是在内存中生成了一个该注解接口的子类实现对象 //调用注解对象中定义的抽象方法,获取返回值 String className = pro.className(); String methodName = pro.methodName(); Class **cls** = Class.forName(className); Object obj = cls.newInstance(); Method method = cls.getMethod(methodName); method.invoke(obj); } }
Java类的泛型参数能作为另外一个泛型类的参数传入吗?
最近遇到一个棘手的泛型问题,精简化后,代码如下: ``` import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class testMain { public static void main(String[] args) throws IllegalAccessException, InstantiationException { People people = new People(); people.doIt("I'm a student!"); } } interface Say { void say(String word); } class Student implements Say { public void print(String say) { System.out.println(say); } @Override public void say(String word) { print(word); } } interface ExecutorCallbackHandler<M, P> { void execute(M mapper, P param); } class DoSomeThing { public <M, P> void batchDo(ExecutorCallbackHandler<M, P> executorCallbackHandler, P param) throws IllegalAccessException, InstantiationException { Type[] genTypes = executorCallbackHandler.getClass().getGenericInterfaces(); Type[] params = ((ParameterizedType) genTypes[0]).getActualTypeArguments(); Class<M> mapperClass = (Class<M>) params[0]; M mapper = mapperClass.newInstance(); executorCallbackHandler.execute(mapper, param); } } class AbstractPeople<M extends Say> { private DoSomeThing doSomeThing = new DoSomeThing(); public void doIt(String param) throws InstantiationException, IllegalAccessException { doSomeThing.batchDo(new ExecutorCallbackHandler<M, String>() { @Override public void execute(M people, String param) { people.say(param); } }, param); } } class People extends AbstractPeople<Student> { } ``` 泛型参数Student,经过AbstractPeople.doIt传入DoSomeThing.batchDo,但是解析时,泛型参数M并未解析成Student,导致出现异常。 请问,是什么原因,如何解决
java类或接口中的泛型到底什么时候该设置他们的类型,什么时候不该?
一个类实现了一个接口 (1)首先是正常情况下对接口中泛型的实现 ![图片说明](https://img-ask.csdn.net/upload/201508/28/1440777140_38346.png) (2)接着是用T和?来模糊的表示接口的泛型 ![图片说明](https://img-ask.csdn.net/upload/201508/28/1440777266_31009.png) ![图片说明](https://img-ask.csdn.net/upload/201508/28/1440777282_548212.png) (3)接着把子类的泛型也设置成T,这时候又不报错了 ![图片说明](https://img-ask.csdn.net/upload/201508/28/1440777292_650690.png) 到底什么时候该设置泛型,什么时候又可以用通配符来代替?
c#泛型类用法
谢谢 请用自己话说,官方的定义我不理解。 泛型方法我知道,参数数据类型先不确定,用的时候指定。 那么泛型类 class xxxx<t> 这是什么意思,用来干嘛
<Category>、(Category.class)分别代表什么,如何理解这个泛型呢
qr.query(sql,new BeanHandler<Category>(Category.class),cid)中Category是一个类, 请问BeanHandler 、<Category>、(Category.class)分别代表什么,如何理解这个泛型呢
List 添加 Class 泛型
public void test(Class clazz) { List list = new ArrayList(); } 这个clazz是从别的地方传过来的,可不可以指定list只能存储这个Class 我用 List<clazz> list = new ArrayList<clazz>(); 并且在类名后加上 <clazz>编译可以通过,但是运行时在后面还可以给list add不同于clazz的对象,不知道这是为什么? [b]问题补充:[/b] List<clazz> list = new ArrayList<clazz>(); 是错误的 <>中应该是类型.并不是实例clazz是Class类的实例所以你上面的代码是错误的. 这种时候应该使用接口来规范类型 那我怎样做才能实现这个功能呢,网上说用反射,不过还没搞清楚。 Thanks in advance! [b]问题补充:[/b] public class Test<T> { public void test(Class<T> clazz){ List<Class<T>> list = new ArrayList<Class<T>>(); Object str = "aa"; list.add((Class<T>) str); } public static void main(String[] args){ Test t = new Test(); t.test(String.class); } } 差不多是这个样子的,但运行的时候会出"java.lang.ClassCastException: java.lang.String", 不知道为什么 [b]问题补充:[/b] 其实我就是想 List list = new ArrayList(); 的时候 这个list中只能存放传进去的指定的class, 比如String或者其他自定义的类。 谢谢大家了。 [b]问题补充:[/b] 比如 Test t = new Test(); t.test(String.class); 这时list.add("abc");是可以的 但list.add(new Timestamp(100))则不行
java反射获取泛型类型 转换错误的问题
在用反射获取泛型类型中 遇到转换类型错误,错误提示是 java.lang.class cannot be cast to java.lang.reflect.ParameterizedType. 求大神解答 跪谢。。。。 我的 代码是 public class fanxingTestDaoImpl<T> { /** * 这个用来获取泛型获取实体类的名字 */ private Class classt; public fanxingTestDaoImpl(){ ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass(); //得到t的实现类型 this.classt = (Class)type.getActualTypeArguments()[0]; System.out.println("泛型得到的方法是"+classt.getSimpleName()); } }
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
立即提问