Tag: Java

Thymeleaf选择选项重置为默认值

在html中有一个搜索表单: 选项中的默认值是“名字”。 当我选择,让我们说,通过手机搜索,按“搜索”并得到结果页面,表单选项被重置为默认值。 但我需要它来保持我选择的变体,在这种情况下,它是“手机”。 什么必须在HTML中进行更改? 填写表格: 收到搜索结果后,“选项”应该保持“手机”: html代码: 在JSP + Spring标签的情况下,很容易解决: 但是Thymeleaf令人困惑

更短的方式来做空检查

大概问过之前,却找不到它。 我正在写很多陈述: if (bar.getFoo() != null) { this.foo = bar.getFoo(); } 我想到了三元运算符,但是在我看来,这并没有让我更好: this.foo = bar.getFoo() != null ? bar.getFoo() : this.foo; 我的主要问题是我必须在两种情况下写两次bar.getFoo()。 当然,我可以写一个解决这个问题的帮手方法,但我想知道是否有更优雅的解决方案。 与以下不同: 避免!= null语句,因为该问题不处理为空值检查的值分配值。

科特林。 如何检查是否可以通过reflection字段?

我正在开发一个代码生成器,在运行时从类中获取数据。 该发生器只能与Kotlin一起使用。 目前,我正面临着这个问题,因为我不知道如何检查该字段是否可以空。 所以主要问题是如何通过reflection来实现这个检查?

当使用Java / Kotlin进行编程时,建议使用尾递归还是迭代版本? 性能有什么不同?

我试图了解编程中的良好实践,我坚持这个问题。 我知道,在Java中,递归函数可能是“一个痛苦的屁股”(有时),我尽可能实现该函数的尾部版本。 这是值得打扰还是应该以旧式的方式? 这两个函数(在Kotlin中)有什么区别: tailrec fun tail_fibonacci(n : BigInteger, fib1 : BigInteger = BigInteger.ZERO , fib2 : BigInteger = BigInteger.ONE) : BigInteger { return when(n){ BigInteger.ZERO -> fib1 else -> tail_fibonacci(n.minus(BigInteger.ONE),fib1.plus(fib2),fib1) } } fun iterative_fibonacci(n: BigInteger) : BigInteger { var count : BigInteger = BigInteger.ONE var a : BigInteger = BigInteger.ZERO var b : BigInteger […]

错误“不能为null”在Kotlin中

有一个.zip文件中有多个文件,我正在尝试获取。 试图解压缩文件提供了一个java.lang.IllegalStateException:zis.nextEntry不能为null。 如何正确地做到这一点? @Throws(IOException::class) fun unzip(zipFile: File, targetDirectory: File) { val zis = ZipInputStream( BufferedInputStream(FileInputStream(zipFile))) try { var ze: ZipEntry var count: Int val buffer = ByteArray(8192) ze = zis.nextEntry while (ze != null) { val file = File(targetDirectory, ze.name) val dir = if (ze.isDirectory) file else file.parentFile if (!dir.isDirectory && !dir.mkdirs()) throw FileNotFoundException(“Failed to […]

科特林代表团的expression,而不是固定的参考

假设我有一个非常复杂的规范定义为一个接口: interface Spec { fun sayHello() } 而一个标准的实现: class Impl(private val msg: String) : Spec { override fun sayHello() { println(msg) } } 现在假设我想创建一个实现此规范的类并委托给一个实现,但是确切的委托对象在整个对象的生命周期中都是可变的。 这是一个例子: class Derived(var target: Spec) : Spec by target 上面的例子的问题是构造函数参数target被设置为调用构造函数时的委托对象。 然后代理直接访问,而不是执行属性访问。 (这一点已经通过查看Kotlin生成的字节码得到证实。) 所以,即使在构造类后属性target被修改,委托也不会改变。 任何人都可以提供一种在Kotlin中执行这个委托的方法,而不必写出每一种方法吗? 一个理想的解决方案还允许委派一些像lambda或其他expression式一样的东西,只要在对象的整个生命周期中需要委托,就会被评估和用作委托。

无法find参数org.gradle.api.Project的方法android()

得到一个错误,当我试图在studio中编译我的项目时,我搜索了很多,没有真正的解决方案 错误:(17,0)在types为org.gradle.api.Project的根项目“booksStudioDir”上找不到参数[build_a7zf1o8ge4ow4uolz6kqzw5ov $ _run_closure2 @ 19201053]的方法android()。 这是我的构建/ gradle文件的示例 buildscript { repositories { maven { url ‘https://maven.fabric.io/public’ } } dependencies { classpath ‘io.fabric.tools:gradle:1.+’ } } apply plugin: ‘com.android.application’ apply plugin: ‘io.fabric’ android { compileSdkVersion 21 buildToolsVersion “23.0.1” defaultConfig { applicationId “com.peade.time” minSdkVersion 10 targetSdkVersion 13 } signingConfigs { release { storeFile file(“/home/bestman/Desktop/mkey/key”) storePassword “androidkeys” keyAlias “peade” […]

如何在android中将方法调用注入到另一个方法中

我有一个class, 一个叫something的领域, 一个名为setSomething的setter方法, 一个叫做onChange的方法,每次改变时都应该调用它。 我希望能够自由地添加更多的领域,并为他们所有人都有相同的行为。 我不想手动调用onChange因为, 很多样板, 代码将被写入Kotlin,所以我不想编写setter函数。 我已经能够想到的理想解决方案是在编译时每个setter方法的return之前以某种方式注入onChange调用。 我已经看过注释处理,但是显然类并不是真的在那个阶段编译的,所以我不得不重新生成整个类。 我不完全明白这一点。 另一个选项似乎是编写一个gradle插件,它将find相关的类并修改它们的字节码。 实际上,我已经开始将它作为一个纯Java项目(gradle插件是半完成的),并且已经能够find类并注入方法调用。 虽然似乎无法成功地将结果写入类文件。 这是我的(使用BCEL ): public class StateStoreInjector { public static void main(String[] args) { // Find all classes that extends StateStore Reflections reflections = new Reflections(“tr.xip.statestore”); Set<Class> classes = reflections.getSubTypesOf(StateStore.class); for (Class c : classes) { try { JavaClass clazz = Repository.lookupClass(c.getName()); JavaClass […]

我必须分配什么编译时types才能获得java.util.Map的返回值

我想从另一个字体派生出一个字体。 这是我想要做的: val font : Font = this.label.getFont(); val attributes : Map = font.getAttributes(); attributes.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON); this.label.setFont(font.deriveFont(attributes)); 但是,Kotlin编译器在这一行上抱怨: val attributes : Map = font.getAttributes(); 随着消息: Type mismatch: inferred type is (Mutable)Map! but Map was expected 根据我对Javagenerics的有限理解,我知道font.getAttributes()返回一个java.util.Map ; 后一种types的参数意味着当你从这个映射中创建一个有界/关闭的genericstypes时,请指定作为第二个types参数的任何扩展java.lang.Object的东西 。 所以,当我首先尝试了以下几行: val attributes : java.util.Map = font.getAttributes(); Kotlin编译器说: 这个类不应该在Kotlin中使用。 改为使用kotlin.collections.Map或kotlin.collections.MutableMap。 还说: Type mismatch: inferred type is […]

Android – 将资产复制到内部存储

美好的一天! 我刚刚开始为Android开发。 在我的应用程序,我需要将我的资产文件夹中的项目复制到内部存储。 我在SO上搜索了很多东西,包括把它复制到外部存储器。 如何将文件从’资产’文件夹复制到SD卡? 这是我想要实现的:我有一个目录已经在X> Y> Z的内部存储。 我需要一个文件复制到Y和另一个到Z. 任何人都可以帮我一个代码片段? 我真的不知道如何继续下去。 对不起,我的英语不好。 非常感谢。