首页 \ 问答 \ 通用替代原则 - 如何管理原则的应用(Generic substitution principle - how application of principle is governed)

通用替代原则 - 如何管理原则的应用(Generic substitution principle - how application of principle is governed)

在Naftalin和Wadler的文本“Java Generics and Collections”中,一段说明尽管Integer是Number的子类型,但List <Integer>不是List <Number>的子类型。

这可以防止人们使用多态方式引用传统上可能允许这样的语句的地方。

我的问题是,由于“替换原则”不适用于List <Integer>和List <Number>的情况,原则上的限制是否与类和特定类型(分配给泛型类型)的位置有关。 组合 - 在所有情况下和一般情况下 - (例如,“List <Integer>”)。 在这种情况下,我将类似于“List <Integer>”的语句中的替代概念称为“List”,而不是“List”或“<Integer>”seperatley。

或者,限制是通过某种机制来定义的,该机制通过通常的扩展和实现机制来指定是否以及哪些类是子类型(因此何时何地应用)。

基本上我不理解在这种情况下将扣押原则定义为适用或不适用的机制。

非常感谢


from the text "Java Generics and Collections" by Naftalin and Wadler, a passage states that though Integer is a subtype of Number, List<Integer> is not a subtype of List<Number>.

This prevents one from using, polymorphically, references to the in places where one might traditionally expect to allow such statements.

My question here is, since the 'substitution principle' does not apply in the case List<Integer> and List<Number>, does the restriction on the principle relate to where a class and a specific type (assigned for a generic type) are combined - in all cases and in general - (here as 'List<Integer>' for example). Here in this case I refer to the notion of substiution in resepct to a statement like 'List<Integer>', as opposed to 'List', or '<Integer>' seperatley.

Or alternatively, is the restriciton instead defined through some mechanism that specifies whether and which classes are subtypes (and thus when and when it applies) as one does through the usual extends and implements mechanism.

Essentially i do not understand the mechanism through which the susbtitution principle in such cases are caused to be defined as applying or not applying.

many thanks


原文:https://stackoverflow.com/questions/37070331
更新时间:2023-10-15 12:10

最满意答案

Case开关可能最适合这个:

Select Case Range("A1").Value
    Case "Element1", "Element2", "Element3", "Element4", "Element5"
        'Do stuff

    Case Else
         'Do other stuff, or do nothing at all

End Select

请注意,以上是区分大小写的。 如果你有混合大小写并且不关心大小写,请使用LCASEUCASE函数转换为单个大小写:

Select Case LCase(Range("A1").Value))
    Case "element1","element2","element3","element4","element5"

或者,您可以在向量数组上使用过滤器函数:

Const Elements As String = "element1,element2,element3,element4,element5"
Dim val$, myArray
myArray = Split(Elements, ",")
val = "element3"

    If UBound(Filter(myArray, val)) >= 0 Then
        'the value is in the array
        MsgBox True
    Else
        'the value is not in the array
        MsgBox False
    End If

虽然有一些Filter功能的怪癖,我认为它并不总是100%可靠,因为它将返回部分匹配。

或者您可以对数组使用Match函数:

If Not IsError(Application.Match(val, myArray, False)) Then
    'value exist in the list
Else
    'value does not exist in the list
End If

A Case switch is probably best-suited for this:

Select Case Range("A1").Value
    Case "Element1", "Element2", "Element3", "Element4", "Element5"
        'Do stuff

    Case Else
         'Do other stuff, or do nothing at all

End Select

Note that the above is case-sensitive. If you have mixed-case and don't care about capitalization, convert to a single case using the LCASE or UCASE function:

Select Case LCase(Range("A1").Value))
    Case "element1","element2","element3","element4","element5"

Alternatively, you can use the filter function on a vector array:

Const Elements As String = "element1,element2,element3,element4,element5"
Dim val$, myArray
myArray = Split(Elements, ",")
val = "element3"

    If UBound(Filter(myArray, val)) >= 0 Then
        'the value is in the array
        MsgBox True
    Else
        'the value is not in the array
        MsgBox False
    End If

There are some quirks with the Filter function though, and I think it is not always 100% reliable since it will return partial matches.

Or you can use the Match function against an array:

If Not IsError(Application.Match(val, myArray, False)) Then
    'value exist in the list
Else
    'value does not exist in the list
End If

相关问答

更多

相关文章

更多

最新问答

更多
  • h2元素推动其他h2和div。(h2 element pushing other h2 and div down. two divs, two headers, and they're wrapped within a parent div)
  • 创建一个功能(Create a function)
  • 我投了份简历,是电脑编程方面的学徒,面试时说要培训三个月,前面
  • PDO语句不显示获取的结果(PDOstatement not displaying fetched results)
  • Qt冻结循环的原因?(Qt freezing cause of the loop?)
  • TableView重复youtube-api结果(TableView Repeating youtube-api result)
  • 如何使用自由职业者帐户登录我的php网站?(How can I login into my php website using freelancer account? [closed])
  • SQL Server 2014版本支持的最大数据库数(Maximum number of databases supported by SQL Server 2014 editions)
  • 我如何获得DynamicJasper 3.1.2(或更高版本)的Maven仓库?(How do I get the maven repository for DynamicJasper 3.1.2 (or higher)?)
  • 以编程方式创建UITableView(Creating a UITableView Programmatically)
  • 如何打破按钮上的生命周期循环(How to break do-while loop on button)
  • C#使用EF访问MVC上的部分类的自定义属性(C# access custom attributes of a partial class on MVC with EF)
  • 如何获得facebook app的publish_stream权限?(How to get publish_stream permissions for facebook app?)
  • 如何防止调用冗余函数的postgres视图(how to prevent postgres views calling redundant functions)
  • Sql Server在欧洲获取当前日期时间(Sql Server get current date time in Europe)
  • 设置kotlin扩展名(Setting a kotlin extension)
  • 如何并排放置两个元件?(How to position two elements side by side?)
  • 如何在vim中启用python3?(How to enable python3 in vim?)
  • 在MySQL和/或多列中使用多个表用于Rails应用程序(Using multiple tables in MySQL and/or multiple columns for a Rails application)
  • 如何隐藏谷歌地图上的登录按钮?(How to hide the Sign in button from Google maps?)
  • Mysql左连接旋转90°表(Mysql Left join rotate 90° table)
  • dedecms如何安装?
  • 在哪儿学计算机最好?
  • 学php哪个的书 最好,本人菜鸟
  • 触摸时不要突出显示表格视图行(Do not highlight table view row when touched)
  • 如何覆盖错误堆栈getter(How to override Error stack getter)
  • 带有ImageMagick和许多图像的GIF动画(GIF animation with ImageMagick and many images)
  • USSD INTERFACE - > java web应用程序通信(USSD INTERFACE -> java web app communication)
  • 电脑高中毕业学习去哪里培训
  • 正则表达式验证SMTP响应(Regex to validate SMTP Responses)