为什么喜欢构图而不是继承呢?每种方法都有哪些权衡取舍?什么时候应该选择继承而不是作文?
我上课了
open data class Person(var name: String)
Run Code Online (Sandbox Code Playgroud)
和另一堂课
data class Student(var reg: String) : Person("")
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误
错误:修饰符'open'与'data'不兼容
如果我从Person类中删除数据的罚款.
为什么kotlin打开和数据不兼容?
我正在开发一个android项目,必须在本地数据库(Room)中存储一些数据.我必须提供的功能之一是以不同语言将数据存储在本地数据库中,例如,如果我有食物信息,则此信息必须以英语,德语,法语等存储.
我的数据库的结构是这样的:
@Entity(tableName = "food")
public class Food{
}
@Entity(tableName = "food_fr")
public class FoodFr{
}
@Entity(tableName = "food_de")
public class FoodDe{
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让这三个不同的表(在不同的语言中)具有相同的列,并且@Dao对象为所有这些表返回一个公共(父)对象?
我不确定这是否可行,但如果某人有解决方案,请帮助.
提前致谢 :)
我有一个父类如下,
interface ITask { }
open class Task(val targetServer: Server) : ITask { }
Run Code Online (Sandbox Code Playgroud)
然后有一个孩子继承它并覆盖主要构造函数,如下所示,
data class FileTask(val sourceServer: Server, targetServer: Server) : Task(targetServer = targetServer) {
}
Run Code Online (Sandbox Code Playgroud)
这在eclipse中引发了编译错误
数据类主构造函数必须只有property(val/var)参数
data从类标题中删除 关键字将导致错误,但我不明白为什么.
保留data关键字并添加var到targetServer 另一个错误
'targetServer'隐藏超类'Task'的成员,需要'override'修饰符
添加override到targetServer要override var targetServer: Server抛出另一个错误
"任务"中的"targetServer"是最终版,无法覆盖
我需要一些帮助才能理解这些错误.
我需要从数据类 B 继承数据类 A。我知道这在Kotlin 中是不可行的。
问题1:
为什么这不可行?
问题2:有
什么办法可以解决这个问题?
例子:
data class A(val data1 : String)
data class B(val data2 : String) : A()
Run Code Online (Sandbox Code Playgroud)
我如何在 Kotlin 中实现这一目标?
我在 Java 中有 2 个模型类,其中一个扩展了另一个
@UseStag
public class GenericMessages extends NavigationLocalizationMap implements Serializable {
@SerializedName("loginCtaText")
@Expose
String loginCtaText;
@SerializedName("forgotPasswordCtaText")
@Expose
String forgotPasswordCtaText;
public String getLoginCtaText() {
return loginCtaText;
}
public String getForgotPasswordCtaText() {
return forgotPasswordCtaText;
}
}
Run Code Online (Sandbox Code Playgroud)
NavigationLocalizationMap 类
public class NavigationLocalizationMap implements Serializable {
@SerializedName("localizationMap")
@Expose
public HashMap<String, LocalizationResult> localizationMap;
@SerializedName("geoTargetedPageIds")
@Expose
public HashMap<String, String> geoTargetedPageIdsMap;
@SerializedName("pageId")
@Expose
public String pageId;
public HashMap<String, LocalizationResult> getLocalizationMap() {
return localizationMap;
}
public void setLocalizationMap(HashMap<String, LocalizationResult> localizationMap) {
this.localizationMap = localizationMap;
} …Run Code Online (Sandbox Code Playgroud) 我知道Kotlin从数据类继承有一些限制.在进行这次讨论时,我学到了更多.
因为Kotlin中的数据类与Java中的POJO类似.我们是否应该不遵循Java POJO类中的继承?总结一下,是不是因为Kotlin的限制我们不允许从数据类继承,或者如果你这样做,设计中存在缺陷.
把它分解成一个更简单的问题.从Java中的POJO类继承是错误的吗?
我有一个抽象类:
abstract class SuperClass(private val privateVal: Int)
我有一个data class扩展抽象类。( DataClass)
如何privateVal在DataClass构造函数中将其作为参数并将其传递给SuperClass构造函数?
以下将不起作用,因为数据类构造函数中只允许使用vals 和vars:
data class DataClass(privateVal: Int) : SuperClass(privateVar)
我想知道为什么 equal 方法 (==) 不能按预期工作。
有什么办法可以修复下面代码中的注释部分吗?
正如您所看到的,p1 和 p2 不相等,既不是参考也不是值。那么为什么 p1 == p2 为真?!
object Main {
@JvmStatic
fun main(args: Array<String>) {
val f1 = Foo(1)
Thread.sleep(3) // to set a different value in parent of f2
val f2 = Foo(1)
val p1 = (f1 as Parent)
val p2 = (f2 as Parent)
println(p1 == p2) // true
println(p1.b == p2.b) // false
}
}
data class Foo(val a: Int) : Parent("$a-${System.currentTimeMillis()}")
sealed class Parent(val b: String) {
override fun …Run Code Online (Sandbox Code Playgroud) kotlin ×7
inheritance ×5
data-class ×3
android ×2
aggregation ×1
android-room ×1
class ×1
composition ×1
constructor ×1
java ×1
oop ×1
pojo ×1
superclass ×1