Java 如何在UML方法中表示泛型参数?

Java 如何在UML方法中表示泛型参数?,java,uml,Java,Uml,我必须将Java应用程序中的一些类逆向工程到UML2类图中。到目前为止,我已经找到了如何表示Jon Skeet在这里提出的整个类的类模板:。有了这些信息,我反向设计了这样一个类: public class Foo<T> { //class fields and methods... } 公共类Foo{ //类字段和方法。。。 } 现在,我遇到了一个难题:如何对一个只包含泛型参数的方法的类进行反向工程: public class OtherFoo { public

我必须将Java应用程序中的一些类逆向工程到UML2类图中。到目前为止,我已经找到了如何表示Jon Skeet在这里提出的整个类的类模板:。有了这些信息,我反向设计了这样一个类:

public class Foo<T> {
    //class fields and methods...
}
公共类Foo{
//类字段和方法。。。
}
现在,我遇到了一个难题:如何对一个只包含泛型参数的方法的类进行反向工程:

public class OtherFoo {
    public <T extends Comparable<T>> boolean bar(T x, T y) {
        //fancy code goes here...
    }
}
公共类OtherFoo{
公共布尔条(TX,TY){
//奇怪的代码在这里。。。
}
}

你知道如何实现任何UML2工具吗?我只是想理解这个概念。

我不知道如何在您选择的工具中做到这一点,但在模型级别上,它的工作方式与类完全相同。使用签名创建模板操作

本规范第17.4.14章规定了以下符号:

模板操作的模板参数和模板参数绑定是位于模板名称之间的两个列表 操作和操作参数。
* ‘’ ‘’‘( ‘ [',']**')'[':']

在您的案例中,让我们首先看看

public <T> boolean bar(T x, T y)
公共布尔条(tx,ty)
这相当于

+条(x:T,y:T):布尔型

您的原始示例看起来有点复杂,因为模板参数被约束到另一个类(Comparable),该类反过来也是一个模板,其参数(我称之为T1)依次绑定到操作的参数。这给了我们

+条形图比较表>>(x:T,y:T):布尔值


注意:(前面有一点深入的讨论)UML(在某种程度上是C++)指定的模板与Java中的泛型非常不同。它们看起来或多或少是一样的,但它们在语义上存在——有时是细微的——差异,这使得两者难以匹配。UML中最重要的一点是:

模板不能以与同类非模板元素相同的方式使用。模板元素可以 仅用于生成绑定元素(例如,模板类不能用作类型化元素的类型)或作为其一部分 另一模板的规范(例如,模板类可以专门化另一模板类)

这意味着在UML中,OtherFoo也需要是一个模板——也就是说,有一个模板签名(带有0个参数)。为了在模板范围之外正确地使用操作模板(即在活动或类似活动中调用它),首先必须将其绑定到具体的操作,然后使用该操作。在您的示例中,这意味着:

  • 将OtherFoo模板绑定到(匿名)绑定类
  • 将bar操作模板绑定到绑定类中的操作

  • +1、好问题!!!!!我觉得这个信息非常有用,非常清晰,谢谢。如果你能像JonSkeet在他的回答中所做的那样(查看我问题的链接),为未来的读者添加两个最新示例的图形,那将是一件好事。我觉得“+bar ComparableT>>(x:T,y:T):Boolean”这个表达式很奇怪。T后面的第一个大号真的正确吗?它不应该是“->”吗?不,“->”表示模板参数绑定,而“>”表示模板参数上的类型约束。因此,在本例中,它不是指“将t绑定到Compariable”,而是“将t限制到Compariable的子类型”。有关详细信息,请参见UML上层结构部分“分类器模板”/“符号”(UML2.5的第9.3.4节)。