草庐IT

generic-variance

全部标签

generics - Kotlin 具体化的泛型不会按计划保持类型

我正在创建一个TypeToken-类似于Gson的系统,我偶然发现了一些我不理解的东西。此代码的目的是只有一个TypeReference具有一个通用参数的类,该参数可以包含多个参数。该类将使用inline创建。函数,这样用户就不需要知道Holder类。请考虑以下代码:packagetestingimportjava.lang.reflect.ParameterizedTypeimportjava.lang.reflect.TypeabstractclassTypeReference{valtype:Type=(javaClass.genericSuperclassasParameter

generics - 使用泛型获取列表类,例如:List<Number>::class

我有一个通用类型的类Builder接受构造函数参数Class所以我可以保留类型。这是我在java代码中经常使用的一个类,所以我不想更改签名。当我尝试像这样使用构造函数时:Builder>(List::class)我收到一个错误:“类文字的左侧只允许使用类”有什么办法解决这个问题吗?我无法更改Builder的构造函数,太多的java类依赖它。我了解整个类型删除问题,我真的只是想让编译器开心。 最佳答案 由于generictypeerasureList类对其所有通用实例都有一个实现。只能得到List对应的类类型,因此只创建Builder

generics - 使用泛型获取列表类,例如:List<Number>::class

我有一个通用类型的类Builder接受构造函数参数Class所以我可以保留类型。这是我在java代码中经常使用的一个类,所以我不想更改签名。当我尝试像这样使用构造函数时:Builder>(List::class)我收到一个错误:“类文字的左侧只允许使用类”有什么办法解决这个问题吗?我无法更改Builder的构造函数,太多的java类依赖它。我了解整个类型删除问题,我真的只是想让编译器开心。 最佳答案 由于generictypeerasureList类对其所有通用实例都有一个实现。只能得到List对应的类类型,因此只创建Builder

generics - 我对同一个类有两个 Kotlin 扩展方法,但是具有不同的通用签名并且编译器会提示

我正在为同一个类编写两个扩展函数:classSomething{...}它们看起来像:funSomething.toJson():String=...funSomething.toJson():String=...并导致编译错误:Kotlin:Platformdeclarationclash:ThefollowingdeclarationshavethesameJVMsignature如何创建两个只有泛型签名不同的扩展函数?还是不可能?注意:这个问题是作者有意编写和回答的(Self-AnsweredQuestions),因此常见的Kotlin主题的答案出现在SO中。它起源于Kotlin

generics - 我对同一个类有两个 Kotlin 扩展方法,但是具有不同的通用签名并且编译器会提示

我正在为同一个类编写两个扩展函数:classSomething{...}它们看起来像:funSomething.toJson():String=...funSomething.toJson():String=...并导致编译错误:Kotlin:Platformdeclarationclash:ThefollowingdeclarationshavethesameJVMsignature如何创建两个只有泛型签名不同的扩展函数?还是不可能?注意:这个问题是作者有意编写和回答的(Self-AnsweredQuestions),因此常见的Kotlin主题的答案出现在SO中。它起源于Kotlin

generics - Out-projected 类型 'ArrayList<*>' 禁止使用 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList'

我有这个片段:classRecyclerViewAdapterinternalconstructor(valclazz:Class,vallayout:Int,vardataList:MutableList).........funRecyclerView.getDataList():ArrayList{return(adapterasRecyclerViewAdapter).dataListasArrayList}.........然后我在这个上使用它:recyclerView.getDataList().add(Person("LemAdane","41yearsold",0))但

generics - Out-projected 类型 'ArrayList<*>' 禁止使用 'public open fun add(index: Int, element: E): Unit defined in java.util.ArrayList'

我有这个片段:classRecyclerViewAdapterinternalconstructor(valclazz:Class,vallayout:Int,vardataList:MutableList).........funRecyclerView.getDataList():ArrayList{return(adapterasRecyclerViewAdapter).dataListasArrayList}.........然后我在这个上使用它:recyclerView.getDataList().add(Person("LemAdane","41yearsold",0))但

ios - 使用 Generic 将 Storyboard 链接到 UIViewController

我有这个ViewController,旨在以通用方式呈现模型对象的详细信息:classAPIModelDetailsVC:UIViewController{...}我希望我的Storyboard使用这个类。我可以在InterfaceBuilder中分配它:我在tableview的didSelect方法中准备这个ViewController(包括指定通用占位符的类型):overridefunctableView(tableView:UITableView,didSelectRowAtIndexPathindexPath:NSIndexPath){print("didSelectRowAt

generics - 为什么我不能得到泛型参数的类?

我有一个函数,它接受一个泛型类型的参数,我想访问它的类:funtest(t:T){t::class}这会因为“类文字中的表达式具有可为空的类型”而失败。没关系,我理解(我可以使用Any?作为我的T和null作为值)。但是,如果我将其更改为保证t不为空,它仍然会失败并显示相同的错误消息:funtest(t:T){t!!::class}在什么情况下t!!::class仍然会造成麻烦?有没有办法在不使用Any(或强制转换为Any)的情况下获取类(class)? 最佳答案 更改您的类型以指示它不可为空并且它应该可以工作。您可以通过指示T需要

generics - 为什么我不能得到泛型参数的类?

我有一个函数,它接受一个泛型类型的参数,我想访问它的类:funtest(t:T){t::class}这会因为“类文字中的表达式具有可为空的类型”而失败。没关系,我理解(我可以使用Any?作为我的T和null作为值)。但是,如果我将其更改为保证t不为空,它仍然会失败并显示相同的错误消息:funtest(t:T){t!!::class}在什么情况下t!!::class仍然会造成麻烦?有没有办法在不使用Any(或强制转换为Any)的情况下获取类(class)? 最佳答案 更改您的类型以指示它不可为空并且它应该可以工作。您可以通过指示T需要