WEB开发网
开发学院软件开发Java Why Java Sucks and C# Rocks(3):Attribute与A... 阅读

Why Java Sucks and C# Rocks(3):Attribute与Annotation

 2010-05-04 00:00:00 来源:WEB开发网   
核心提示: 因此,Java的Annotation落后于C#的Attribute的关键之处,Why Java Sucks and C# Rocks(3):Attribute与Annotation(5),在于Java的Annotation只能定义为失血的对象,而C#的Attribute可以在需要的时候包含一定的

因此,Java的Annotation落后于C#的Attribute的关键之处,在于Java的Annotation只能定义为失血的对象,而C#的Attribute可以在需要的时候包含一定的逻辑,这样便可以让C#程序员获得更好的灵活性,使用更丰富的开发模式。与此相比,“类”和“接口”的区别,其实倒真只是表象罢了。

缺点2:古怪的约定

相比于上一个缺点来说,第二个缺点似乎并不那么严重,不过我认为这的确也是Java语言的Annotation设计中无法令人满意的地方。

在前面的代码中我们已经可以发现,其实C#的Attribute及Java的Annotation在使用上非常相似,为此我们再来仔细对比一下:

[Range(Min = 10, Max = 60)] // C# 
 
@RangeValidation(min = 10, max = 60) // Java

这样看来,C#和Java在使用时的形式基本完全一致,都是使用名称+属性名的方式进行标记。不过其实C#和Java都有额外的语法,例如在C#中,我们可以这样定义RangeAttribute类:

public class RangeAttribute : ValidationAttribute 
{ 
  public RangeAttribute() { } 
 
  public RangeAttribute(int min, int max) 
  { 
    this.Min = min; 
    this.Max = max; 
  } 
 
  public int Min { get; set; } 
 
  public int Max { get; set; } 
 
  ... 
}

与之前的RangeAttribute相比,新的定义增加了两个构造函数定义,一个是无参数的构造函数(其实原来的定义也有,只不过由编译器自动添加),还有一个构造函数则直接接收min和max参数,这样我们便可以直接通过构造函数来标记Attribute了:

上一页  1 2 3 4 5 6 7  下一页

Tags:Why Java Sucks

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接