日期:2014-05-18  浏览次数:20679 次

关于注解类型的疑问
最近才注意到注解里的方法,返回类型只能是 基本类型及其封装类型、String、Class的。请问,这有什么讲究么?


------解决方案--------------------
基于注解嘛,编译时候要扫描胜成对应文件的。如果类型自定义,编译的时候你就可以想象多费劲了,或者给提供一些借口;
但是,基本类型,还有人家提供的Model够用了,所以没必要麻烦了吧。
------解决方案--------------------
引用:
Quote: 引用:

基于注解嘛,编译时候要扫描胜成对应文件的。如果类型自定义,编译的时候你就可以想象多费劲了,或者给提供一些借口;
但是,基本类型,还有人家提供的Model够用了,所以没必要麻烦了吧。

自己思考了下,感觉还是编译器不愿意做那个功能而已。实际上如果支持了,自定义的注解的处理、拦截,还是用户自己设计逻辑的,应该不会给编译器带来多大麻烦事儿。

(只要支持注解的方式:@MyOne(Type1=new Type1())  这种语法。)

在技术方面方面确实是这么回事,我的理解是  注解这种框架  首先呢他是一种框架,站在这个角度分析,框架的目的是增加通用性、简易的目的。如:JQ对JS进一步封装,屏蔽了琐碎的一些操作;Hibernate的JDBC,也失去了一些性能上的代码;Flex提供的组件开发,同样失去了灵活性。  这些给我的感觉是,框架不去做细,而是通用性能够满足,太细则繁琐。大多数的框架口号是,让我们把精力放到业务上面,实现给我们封装好; 
所以:我自己给找个理由,当然不一定对,仅为讨论。  框架处理在细节上,能省则省。
------解决方案--------------------
不单单要求类型,还必须是 compile time constant,应该是反射机制需要这样。

enum 也可以。


public class A {
  
  public static final String s = "a";
}

public class B {
  
  public static final String s = method();
  
  static String method() {
    
    return "b";
  }
}


A.a 可以,B.b 不行。
------解决方案--------------------
@Override
public List    这个算不
------解决方案--------------------
也就是说不用new就能创建的东西呗
------解决方案--------------------
引用:
也就是说不用new就能创建的东西呗

任何情况下底层都是用new来实现类对象的实例化的,只是有些框架把对象实例化给封装起来了。
------解决方案--------------------
因为它已经限制死了,只能是八种基本数据类型加上String,Enum,Class,annotations这四种,别的都不支持的。