当前位置: 首页 > news >正文

网站建设程序员做什么中企动力是上市公司吗

网站建设程序员做什么,中企动力是上市公司吗,西安网站建设方案外包,低价网站建设多少钱对于Java开发人员来说#xff0c;每天都需要使用注释。 如果没有别的#xff0c;简单的Override注释应该响起。 创建注释要复杂一些。 在运行时通过反射使用“自制”注释或创建编译时调用的注释处理器也是一种复杂性。 但是我们很少“实现”注释接口。 暗中有人暗地里为我们做… 对于Java开发人员来说每天都需要使用注释。 如果没有别的简单的Override注释应该响起。 创建注释要复杂一些。 在运行时通过反射使用“自制”注释或创建编译时调用的注释处理器也是一种复杂性。 但是我们很少“实现”注释接口。 暗中有人暗地里为我们做。 当我们有注释时 Retention(RetentionPolicy.RUNTIME) Target(ElementType.TYPE) public interface AnnoWithDefMethod {String value() default default value string; } 然后用这个注解注解的类 AnnoWithDefMethod(my default value) public class AnnotatedClass { } 最后我们在运行时执行期间获取注释 AnnoWithDefMethod awdm AnnotatedClass.class.getAnnotation(AnnoWithDefMethod.class); 那么我们如何进入变量awdm呢 它是一个对象。 对象是类的实例而不是接口。 这意味着Java运行时幕后的某个人“实现了”注释接口。 我们甚至可以打印出对象的特征 System.out.println(awdm.value());System.out.println(Integer.toHexString(System.identityHashCode(awdm)));System.out.println(awdm.getClass());System.out.println(awdm.annotationType());for (Method m : awdm.getClass().getDeclaredMethods()) {System.out.println(m.getName());} 得到类似的结果 my default value 60e53b93 class com.sun.proxy.$Proxy1 interface AnnoWithDefMethod value equals toString hashCode annotationType 因此我们不需要实现注释接口但是可以根据需要实现。 但是我们为什么要那样 到目前为止我遇到了一种解决方案配置guice依赖项注入。 Guice是Google的DI容器。 绑定的配置以说明性方式作为Java代码提供如文档页面中所述 。 您可以将类型绑定到实现只需声明 bind(TransactionLog.class).to(DatabaseTransactionLog.class); 这样所有注入的TransactionLog实例将属于DatabaseTransactionLog 。 如果要在代码的不同字段中注入不同的注入则应以某种方式向Guice发出信号例如创建注释将注释放在字段或构造函数参数上并声明 bind(CreditCardProcessor.class).annotatedWith(PayPal.class).to(PayPalCreditCardProcessor.class); 这要求PayPal作为注释接口并且您需要编写一个新的注释接口以与每个CreditCardProcessor实现或更多实现相伴以便您可以在绑定配置中用信号通知和分离实现类型。 仅有太多的注释类这可能是一个过大的杀伤力。 除此之外您还可以使用名称。 您可以使用注解Named(CheckoutPorcessing)注释注入目标并配置绑定 bind(CreditCardProcessor.class).annotatedWith(Names.named(CheckoutProcessing)).to(CheckoutCreditCardProcessor.class); 这是众所周知的技术已广泛用于DI容器中。 您指定类型接口创建实现最后使用名称定义绑定类型。 这样做没有问题只不过在键入处理而不是处理时很难注意到。 在绑定运行时失败之前此类错误将一直隐藏。 您不能简单地使用final static String来保存实际值因为它不能用作注释参数。 您可以在绑定定义中使用这样的常量字段但是它仍然是重复的。 这个想法是使用其他东西代替String。 编译器检查的内容。 显而易见的选择是使用一个类。 为了实现可以从NamedImpl的代码学习而创建代码 NamedImpl是实现注释接口的类。 代码是这样的注意 Klass是这里未列出的注释接口。 class KlassImpl implements Klass {Class? extends Annotation annotationType() {return Klass.class}static Klass klass(Class value){return new KlassImpl(value: value)}public boolean equals(Object o) {if(!(o instanceof Klass)) {return false;}Klass other (Klass)o;return this.value.equals(other.value());}public int hashCode() {return 127 * value.hashCode() ^ value.hashCode();}Class valueOverrideClass value() {return value} } 实际的绑定看起来像 Injectpublic RealBillingService(Klass(CheckoutProcessing.class) CreditCardProcessor processor,TransactionLog transactionLog) {...}bind(CreditCardProcessor.class).annotatedWith(Klass.klass(CheckoutProcessing.class)).to(CheckoutCreditCardProcessor.class); 在这种情况下编译器很可能会发现任何错字。 实际发生在幕后的事情是什么为什么我们要求实现注释接口 配置绑定后我们提供一个对象。 调用Klass.klass(CheckoutProcessing.class)将创建一个实例KlassImpl当吉斯试图决定是否实际绑定配置有效结合CheckoutCreditCardProcessor到CreditCardProcessor论点的构造RealBillingService它只是调用该方法equals()上注释对象。 如果Java运行时创建的实例请记住Java运行时创建的实例的名称类似于class com.sun.proxy.$Proxy1 并且我们提供的实例相等那么将使用绑定配置否则必须进行其他绑定比赛。 还有另一个问题。 实现equals()是不够的。 您可能并且如果您是Java程序员这就是您为什么还要阅读这篇文章您当然不是Lisp程序员的原因那么您也应该记住如果您覆盖equals()那么您还必须覆盖hashCode() 。 实际上您应该提供一个与Java运行时创建的类进行相同计算的实现。 这样做的原因是该比较可能不会直接由应用程序执行。 Guice可能确实正在从Map查找注释对象。 在那种情况下哈希码用于标识比较对象必须位于其中的存储桶然后使用equals()方法检查身份。 如果在创建Java运行时的情况下hashCode()方法返回的数字不同则对象甚至无法匹配。 equals()将返回true但不会为它们调用它因为在映射中找不到该对象。 方法hashCode的实际算法在接口java.lang.annotation的文档中描述。 我以前看过此文档但了解我第一次使用Guice并实现类似的注释接口实现类时定义算法的原因。 最后一件事是该类还必须实现annotationType() 。 为什么 如果我知道了我会写。 翻译自: https://www.javacodegeeks.com/2016/03/implementing-annotation-interface.html
http://www.pierceye.com/news/214432/

相关文章:

  • 网站设计怎么弄微信表情开放平台官网
  • 做网站纸张大小滨州网站建设模板建设
  • wordpress建站位置被跨境电商骗了怎么办
  • 巫山网站建设哇塞fm网站维护
  • 南宁百度网站推广计算机网站建设与推广
  • 汉中网站建设开发做微网站是订阅号还是服务号号
  • 中国商城网站建设h5响应式网站模板下载
  • 建设个商城网站需要多少钱网上商城系统平台官网
  • 软件开发与网站开发的区别最新源码
  • 电子商务网站建设策划中国网站建设公司排行
  • 网站的推广方式组合经验丰富的网站制作公司
  • 北京企业网站建设php制作公司网站首页
  • 保险网站建设网站 为何要 备案
  • 南宁网站设计可以找我wordpress 主题
  • 池州家居网站建设怎么样h5链接是什么意思
  • 网站添加站长统计代码凡科建站登录入口官方正版
  • 淮北做网站的公司有哪些手机网站设计只选亿企邦
  • 网站服务器打不开爱站工具网
  • php网站接口开发wordpress添加作者
  • 网站建设漂亮的模板创新网站建设工作
  • 国内做服装的网站有哪些方面wordpress邮件订阅
  • 建立个人网站主题安徽省建设厅网站打不开
  • 做互联网小程序 和网站有没有前景广州网站制作教程
  • 新网网站内部优化wordpress菜单图标
  • 深圳市龙华区住房和建设局网站网站开发连接数据库
  • 做张家界旅游网站多少钱做网站的步骤 优帮云
  • 怎么建立一个好公司网站网站模版参考
  • 成都大型网站设计公司怎么快速建设小型外贸网站
  • 建设工程规范在哪个网站发布河南网络推广培训
  • 深圳宝安上市公司网站建设报价石家庄教育学会网站建设