在第3章第8项中:
public final class CaseInsensitiveString {
private final String s;
public CaseInsensitiveString(String s) {
if (s == null)
throw new NullPointerException();
this.s = s;
}
@Override public boolean equals(Object o) {
return o instanceof CaseInsensitiveString &&
((CaseInsensitiveString) o).s.equalsIgnoreCase(s);
}
// remainder omitted
}
Run Code Online (Sandbox Code Playgroud)
在描述了该equals()方法的问题之后,他继续在比较字段的上下文中讨论这个类.
对于某些类,例如上面的CaseInsensitiveString,字段比较比简单的相等测试更复杂.如果是这种情况,您可能希望存储该字段的规范形式,因此该
equals()方法可以对这些规范形式进行廉价的精确比较,而不是更昂贵的不精确比较.这种技术最适合不可变类; 如果对象可以更改,则必须使规范形式保持最新.
所以我的问题(我仔细检查了'规范'意味着什么):Bloch在谈论什么?规范形式是什么?我已经准备好被告知答案很简单(大概是他的编辑会告诉他增加更多),但我想看到其他人这么说.
他还在hashCode()下一个项目9中提到了同样的事情.
为了在上下文中给出它,他还讨论了该equals()方法的错误版本CaseInsensitiveString:
// Broken - violates symmetry
@Override public boolean equals(Object o) {
if (o instanceof CaseInsensitiveString)
return s.equalsIgnoreCase(
((CaseInsensitiveString) o).s); …Run Code Online (Sandbox Code Playgroud) 我昨天在 Ubuntu 上从 1.5 升级到了 Android Studio 2.0。当我在 Android Studio 2.0 中进行单元测试时,即使通过了所有测试,它也会显示 Terminated 测试状态。有时它只显示部分测试通过。我很确定我的代码正在运行并且测试是正确的,因为我在 Android Studio 1.5 上有相同的设置。
例如,我有 22 个测试。有时它显示所有 22 个测试已通过,在下一次运行时它显示22 个测试中的21 个已通过,有时已停止。22 个测试中有 20 个通过了,其他时候它显示所有 20 个测试都通过了,即使我有 22 个测试。这一切都是随机发生的。不显示失败消息。
我在一个类似的 IntelliJ问题上找到了关于 Android studio 的答案,关闭 Instant Run 到热插拔可以解决这个问题。但这并没有解决问题。
我尝试在 Android Studio 1.5 中运行测试,但没有问题。
有没有人在 Android Studio 2.0 中遇到过任何此类问题,您是否找到了解决方法?任何帮助深表感谢。谢谢!
如果我只想在提示窗口中输入整数,那么在 JavaScript 中使用+prompt而不是常规使用是否很好prompt?它+prompt在 JavaScript 标准/规则中是否说了类似的话?
将Android Studio升级到后,将2.1.2旧项目导入到我的代码中时,就会出现警告。警告是:
Instance field name doesn't match regex '[a-z]+'
Local variable name doesn't match regex '[a-z]+'
Instance field access is not qualified with 'this'
Run Code Online (Sandbox Code Playgroud)
这是屏幕截图。
如果我将同一类文件复制到另一个新项目,则不会出现警告。仅旧项目显示这些警告。这是我的build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.1"
defaultConfig {
applicationId "com.example.app"
minSdkVersion 10
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.1.0'
compile 'com.android.support:design:24.1.0'
androidTestCompile 'junit:junit:4.12'
}
Run Code Online (Sandbox Code Playgroud)
我尝试过File menu -> …
我在 kotlin 中使用安全转换选项,即as?当数据类型不兼容时,我仍然收到类转换异常,当我通过编写执行案例的通用方法执行此操作时,会发生这种情况,但是如果我直接执行转换,它会返回正如安全转换所预期的那样,为 null
class CastTest(val data: Any) {
fun castViaGenericMethod(): TypeA? {
return castToContext<TypeA>()
}
fun castDirectly(): TypeA? {
return data as? TypeA
}
private fun <CONTEXT> castToContext(): CONTEXT? = data as? CONTEXT
}
Run Code Online (Sandbox Code Playgroud)
castViaGenericMethod()->ClassCastException当数据不是 类型时,此方法将抛出异常TypeA。
->当无法进行强制转换时castDirectly()返回。null
请建议如何做到这一点。
在 Android 中,由于性能问题,建议不要使用枚举。直到最近,情况仍然如此,Google IO 2018 中宣布枚举现在可以安全使用,尽管对于性能更高的应用程序仍然建议避免使用它们。
我的问题是:
我们可以在 android 中广泛使用 kotlin 密封类吗?
密封类似乎是枚举的扩展。如果是这样,我们应该使用类似于枚举的密封类吗?
提前致谢。
谁能帮我解释一下这里发生了什么?
private val map1 = mutableMapOf<String, Data<State<*>>>()
private val map2 = mutableMapOf<String, Data<*>>()
init {
map1.put("1", Data<State<String>>()) //it does not work
map2.put("2", Data<State<String>>()) //it works
map2.put("3", Data<State<Int>>()) //it works
}
class Data<T>
class State<T>
Run Code Online (Sandbox Code Playgroud)
我从 Kotlin 文档中读到,如果类型未知,您可以使用星形投影(*),然后再使用任何类型。那么为什么它不适用于第一种情况呢?它说Type Mismatch Error。
我在sequelize-typescriptUser中定义 a和 a之间的一对多关系。Product
以下是型号:
产品.ts
@Table
export class Product extends Model {
@Column({ primaryKey: true })
id!: string
@Column
title!: string
@Column({ type: DataType.DOUBLE })
price!: number
@Column
imageUrl!: string
@Column
description?: string
@ForeignKey(() => User)
@Column
userId?: string
@BelongsTo(() => User)
user?: User
}
Run Code Online (Sandbox Code Playgroud)
用户.ts
@Table
export class User extends Model {
@Column({ primaryKey: true })
id!: string
@Column
name!: string
@Column
email!: string
@Column
@HasMany(() => Product)
products?: Product[]
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Specified type of …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android应用程序 Api等级8.
现在我想知道包含执行主体的实际jar(不是项目中包含的'android.jar'Api jar)文件的位置,即'android.jar的实现jar文件.
我通过android sdk安装目录搜索了很多,但没有找到这样的jar文件.为此目的是否存在任何jar文件?如果没有,那么android虚拟设备如何执行源代码?
谢谢.
想知道为什么红黑树插入时,我们先将新节点标记为红色,然后再进行一些调整?为什么不将其标记为黑色并做一些适当的调整呢?谢谢。
我认为唯一的原因是,添加红色节点不会破坏红黑树关于黑色节点相关规则的任何规则(例如从根到叶子的路径包含相同数量的黑色节点),只需要调整任何违反红色规则(即父/子不能是连续的两个红色节点),这使得代码简单。我不认为添加黑色节点并调整黑色节点数量(在不同路径上)的违规是不可能的。总之,添加黑色以外的红色节点只是为了代码简单,没有其他原因。如果我错了,请随时纠正我。
android ×5
kotlin ×3
java ×2
algorithm ×1
casting ×1
enums ×1
equals ×1
express ×1
generics ×1
gradle ×1
javascript ×1
junit ×1
mysql ×1
performance ×1
regex ×1
sealed-class ×1
sequelize.js ×1
typescript ×1
unit-testing ×1