小编Yog*_*ity的帖子

Java:已检查vs未经检查的异常说明

我已经在StackOverFlow上阅读了有关已检查和未经检查的异常的多个帖子.老实说,我还是不太确定如何正确使用它们.

Joshua Bloch在" Effective Java "中说过

对可恢复条件使用已检查的异常,对编程错误使用运行时异常(第2版中的第58项)

让我们看看我是否正确理解这一点.

以下是我对已检查异常的理解:

try{
    String userInput = //read in user input
    Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
    id = 0; //recover the situation by setting the id to 0
}
Run Code Online (Sandbox Code Playgroud)

1.以上是否考虑了检查异常?

2. RuntimeException是未经检查的异常吗?

以下是我对未经检查的异常的理解:

try{
    File file = new File("my/file/path");
    FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){

//3. What should I do here?
    //Should I "throw new FileNotFoundException("File not found");"?
    //Should I log?
    //Or should I System.exit(0);?
}
Run Code Online (Sandbox Code Playgroud)

4.现在,上述代码也不能成为检查异常吗?我可以尝试恢复这样的情况吗?我可以吗?(注意:我的第3个问题在catch上面)

try{
    String …
Run Code Online (Sandbox Code Playgroud)

java exception runtimeexception checked-exceptions unchecked-exception

678
推荐指数
11
解决办法
31万
查看次数

Kotlin - 使用"by lazy"与"lateinit"进行属性初始化

在Kotlin中如果你不想在构造函数或类体的顶部初始化类属性,你基本上有这两个选项(来自语言参考):

  1. 延迟初始化

lazy()是一个函数,它接受一个lambda并返回一个Lazy实例,它可以作为实现一个惰性属性的委托:第一次调用get()执行传递给lazy()的lambda并记住结果,后续调用get()只返回记住的结果.

public class Hello {

   val myLazyString: String by lazy { "Hello" }

}
Run Code Online (Sandbox Code Playgroud)

所以第一次调用和子命令调用,无论它在哪里,到myLazyString将返回"Hello"

  1. 延迟初始化

通常,必须在构造函数中初始化声明为具有非null类型的属性.但是,这通常不方便.例如,可以通过依赖注入或单元测试的设置方法初始化属性.在这种情况下,您无法在构造函数中提供非null初始值设定项,但在引用类体内的属性时仍希望避免空值检查.

要处理这种情况,可以使用lateinit修饰符标记属性:

public class MyTest {

   lateinit var subject: TestSubject

   @SetUp fun setup() { subject = TestSubject() }

   @Test fun test() { subject.method() }
}
Run Code Online (Sandbox Code Playgroud)

修饰符只能用于在类体(不在主构造函数中)内声明的var属性,并且只能在属性没有自定义getter或setter时使用.属性的类型必须为非null,并且它不能是基本类型.

那么,如何在这两个选项之间正确选择,因为它们都可以解决同样的问题?

properties kotlin

232
推荐指数
7
解决办法
7万
查看次数

如何在Intellij Idea 12中重命名/移动项目?

如此处所述,可以更改项目的名称.但是,它只更改项目的名称,它不会更改文件夹结构.

例如,如果您的项目名为sample1并且它位于〜/ user1/development/IdeaProjects/sample1,则如果将项目名称更改为sample2,则文件夹位置将不会更改为〜/ user1/development/IdeaProjects/sample2.

java ide intellij-idea kotlin

35
推荐指数
4
解决办法
4万
查看次数

Collection <?>和Collection <T>之间有什么区别?

我主要是一名C#开发人员,我正在向我的朋友教授Data Structures,他们在他们的大学里使用Java,我在Java中看到了这样一个表达式:

void printCollection(Collection<?> c) {
    for (Object e : c) {
        System.out.println(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我还没有在C#中看到这样的东西,所以我想知道Java Collection<T>Collection<?>Java 之间的区别是什么?

void printCollection(Collection<T> c) {
    for (Object e : c) {
        System.out.println(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为它也可以用上面的方式编写.在文档中的家伙比较Collection<Object>Collection<T>虽然.

示例来自http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

java generics collections types unbounded-wildcard

23
推荐指数
4
解决办法
1063
查看次数

哈希中的主要和辅助群集是什么?

在我正在阅读的教科书中找到哈希冲突管理主题中的主要和次要群集之间的区别,过去几天我很困惑.

algorithm hash quadratic-probing data-structures linear-probing

16
推荐指数
2
解决办法
3万
查看次数

Android日期时间选择器在一个对话框中

我正在Date Time为我的Android应用程序使用材料选择器.但我想在一个对话框中组合DateTime选择器.

我正在关注这一个.但是我需要选择日期选择之后的时间.

请建议可行的方法来做这个.

java android datetimepicker kotlin material-design

16
推荐指数
3
解决办法
3万
查看次数

不可重复读取与脏读取之间的区别

这个 oracle java教程:

当事务A检索行时,事务B随后更新该行,并且事务A稍后再次检索同一行,则发生不可重复的读取.事务A检索同一行两次但看到不同的数据.

脏读和不可重复读之间有什么区别?这不是一回事吗?因其他人的更新而读错了结果?

提前致谢.

java database transactions jdbc

15
推荐指数
3
解决办法
1万
查看次数

TypeORM:QueryFailedError:关系不存在

我需要一些有关迁移的帮助。我正在尝试使用迁移来播种数据库。但我收到错误“QueryFailedError:关系“帐户”不存在”。我认为这只是典型的新手错误。所以请检查我的代码:

帐户.实体.ts

import { BeforeInsert, Column, Entity, OneToMany } from 'typeorm';
import { AbstractEntity } from '../../common/abstract.entity';
import { SourceEntity } from '../source/source.entity';
import { UtilsService } from '../../shared/services/utils.service';

@Entity({ name: 'account' })
export class AccountEntity extends AbstractEntity {
  @Column({ unique: true })
  username: string;

  @Column({ nullable: true })
  password: string;

  @OneToMany(() => SourceEntity, (source) => source.account, {
    cascade: true,
  })
  sources: SourceEntity[];

  @BeforeInsert()
  async setPassword() {
    this.password = UtilsService.generateHash(this.password);
  }
}
Run Code Online (Sandbox Code Playgroud)

种子数据.migration.ts

import { getCustomRepository, MigrationInterface, QueryRunner } from …
Run Code Online (Sandbox Code Playgroud)

database postgresql node.js typeorm nestjs

12
推荐指数
2
解决办法
3万
查看次数

嵌套让块在Kotlin

let在Kotlin中使用多个嵌套是一个好习惯,还是应该引入一个局部变量?有没有任何开销?

webView?.let { webview ->
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        webview.setLayerType(View.LAYER_TYPE_HARDWARE, null)
    } else {
        webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null)
    }

    webview.webViewClient = WebViewClient()

    webview.settings.let { settings ->
        settings.javaScriptEnabled = true
        settings.setSupportZoom(false)
        settings.builtInZoomControls = false
        settings.displayZoomControls = false
        settings.loadsImagesAutomatically = true
    }
}
Run Code Online (Sandbox Code Playgroud)

android kotlin

11
推荐指数
1
解决办法
3832
查看次数

Nestjs overrideProvider 与单元测试中的提供程序

我在 NestJS 中看到两种模拟服务进行单元测试的方法,第一种与我们在实际模块中定义提供程序相同,例如:

const module = await Test.createTestingModule({
  providers: [
    UserService,
    {
      provide: getRepositoryToken(User),
      useValue: mockUsersRepository,
    }
  ],
}).compile();
Run Code Online (Sandbox Code Playgroud)

以及方法的另一种方式overrideProvider。如下:

const module = await Test.createTestingModule({
  imports: [UserModule]
})
.overrideProvider(getRepositoryToken(User))
.useValue(mockUsersRepository)
.compile();
Run Code Online (Sandbox Code Playgroud)

有什么不同?

unit-testing nestjs nestjs-testing

9
推荐指数
2
解决办法
6060
查看次数