A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 车风波 于 2012-6-17 19:11 编辑

如题
  1. public class Test<M> {

  2. public static void test(M m) {

  3. }
  4. }
复制代码
这样写有错误。
  1. public class Test<M extends Throwable> {

  2. public void tCatch(M m) {
  3. try {
  4. throw new Exception();
  5. } catch (M e) {
  6. }
  7. }
  8. }
复制代码
这样写也有错误。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
  静态方法不可以访问类上定义的泛型。
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。
回复 使用道具 举报
  1. public class Test<M> {

  2. public static void test(M m) {

  3. }
  4. }
复制代码
这句话的错误提示是无法在静态上下文中引用非静态类 M.
因为test方法是静态的可以用类名直接调用,而M只有在类Test创建对象的时候才会明确.
test静态方法存在的时候还没明确M是什么.
所以静态方法不可以访问类上定义的泛型.
如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上.
可以改成:
  1. public static <W> void test(W w)
  2. {}
复制代码
这样就可以了.
至于
  1. throw new Exception();
  2. } catch (M e)
  3. {}
  4. }
复制代码
catch的作用是处理异常,所以catch的参数应该都是异常的类型,而不是泛型.
所以不行.

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
龙秋地 发表于 2012-6-17 18:00
这句话的错误提示是无法在静态上下文中引用非静态类 M.
因为test方法是静态的可以用类名直接调用,而M只有在 ...

明白,多谢。
回复 使用道具 举报
车风波 发表于 2012-6-17 19:07
明白,多谢。

客气,客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马