首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin泛型类到数学数字

Kotlin泛型类到数学数字
EN

Stack Overflow用户
提问于 2018-11-30 15:35:23
回答 1查看 637关注 0票数 2

所以我只是用Kotlin语言编程学习泛型类,我只是用泛型类编写数学数字的代码,但我不知道问题到底在哪里

我的守则:

代码语言:javascript
复制
class Third<D, E> {    
    var num1: D? = null
    var num2: E? = null

    fun print_math_formula(b: D, c: E) {        
        val code_of_Formula: Int = 1
        val num1 = b
        val num2 = c

        var num1+num2
    }

}

fun main(args: Array<String>){
   var obj4 = Third<Int, Int>()
   obj4.print_math_formula(5, 6)
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-30 15:45:22

上面的代码不会编译,因为您试图在泛型类中使用+操作符,但是泛型类不知道您使用的是数字。就编译器而言,类型DE可以是任何东西,例如两个完全无关的对象。所以它不能把它们加在一起。

当您的类以泛型方式操作给定类型的对象时,应该使用泛型类。例如,标准List类型是一个泛型类,因为它可以存储给定类型的对象列表。如果构造List<String>实例,则该实例可以存储字符串列表。如果构造List<Int>实例,则该实例存储整数列表。

在你的例子中,你正在做一些更具体的事情,它只适用于某些类型,例如数字。现在,在创建泛型类时,您可以说它可以操作的对象类型是有限的,例如实现了一些接口。所以在你的例子中,如果你知道这个类总是和数字一起工作,你可以说你的类只在Number的子类上操作。

代码语言:javascript
复制
class Third<D: Number, E: Number>

IntLong等都是Number的子类。但是,在这种特殊情况下,这不会对您有多大帮助,因为+操作符不在Number基类上:它在每个子类上的实现方式不同。如果指定类型DE必须是Number的子类,则只允许调用存在于Number类本身上的方法。例如,您可以这样做:

代码语言:javascript
复制
val test = num1.toDouble() + num2.toDouble()

因为toDouble被声明为Number类上的一个方法。然而,我不认为这是一个伟大的想法,真的,因为任何形式的转换都会引起问题,例如舍入等等。

也许在这种特殊情况下,泛型不是正确的解决方案。如果您只是想了解泛型,可以找一个不同的例子,或者创建一些从公共基类派生出来的自定义类,然后使用它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53560522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档