Tag: 扩展功能

kotlin中的全局扩展函数

嘿,我想在kotlin上做一个类,它将包含我将在几个地方使用的所有扩展函数,例如: class DateUtils { //in this case I use jodatime fun Long.toDateTime() : DateTime = DateTime(this) fun String.toDateTime() : DateTime = DateTime.parse(this) } class SomeClassWithNoConnectionToDateUtils { fun handleDataFromServer(startDate: String) { someOtherFunction() //startDate knows about toDateTime function in DateUtils startDate.toDateTime().plusDays(4) } } 有没有办法来执行这样的操作

为“Number Classes”重载+和+ =运算符

我想为封装简单Number的类创建扩展函数。 例如DoubleProperty 。 我遇到了这个问题,我不能同时重载+和+=运算符。 我不想创建一个行为,通过以下测试: class DoublePropertyTest { lateinit var doubleProperty: DoubleProperty @Before fun initialize() { doubleProperty = SimpleDoubleProperty(0.1) } @Test fun plus() { val someProperty = doubleProperty + 1.5 assertEquals(someProperty.value, 1.6, 0.001) } @Test fun plusAssign() { val someProperty = doubleProperty doubleProperty += 1.5 //error if + and += are overloaded assert(someProperty === doubleProperty) […]

有没有办法在Intellij IDE中显示给定的Kotlin类的所有扩展函数?

到目前为止,我发现的唯一方法是创建给定类的实例,然后使用自动完成来查看所有可能的功能。 显然,这种方式很麻烦,花费太多时间。 有没有更好的方法来看到所有可能的功能?

可以用“静态”方式调用扩展函数吗?

是否有可能创建一个扩展函数,并把它称为静态 ? 例如… fun System.sayByeAndExit() { println("Goodbye!") System.exit() } fun main(args: Array<String>) { System.sayByeAndExit() // I'd like to be able to call this } 我知道代码示例不起作用… 我明白,Kotlin的扩展函数是静态解析的 , 正如Kotlin参考文献(扩展函数)中所提到的 ,但这并不意味着它们可以被调用,就好像它们是一个类中的静态函数(在Java中)。 我也明白这个代码不会工作,因为没有 System的实例传入编译器会生成的方法; 因此它不会编译。 我为什么要这个? 你们中的一些人可能会想知道为什么这种行为是可取的。 我可以理解为什么你会认为这不是,所以这里有一些原因: 它具有标准扩展功能给予的所有好处。 不需要创建类的一个实例来访问额外的功能。 这些函数可以从系统范围的上下文中访问(只要该类是可见的)。 总结… Kotlin是否有办法将一个静态函数“钩”到一个类上? 我很想知道。

Kotlin KClass实例里面的扩展功能

我需要访问通用扩展函数中的类类型。 例如,如果我想创建一个扩展函数来返回我正在扩展的类型成员的集合,我会这样做: fun <T> T.getMembers() = this::class.memberProperties 问题是我不能做这个:: class和T ::类里面的函数。 有没有办法访问泛型类的类类型?

Kotlin – 如何从另一个文件访问我的新类扩展功能

我对Kotlin很新。 我想能够添加一个函数到我的抽象类,所以当我定义该函数时,我将能够在该类的每个孩子(他们继承了抽象类) 但是,我想在其他文件中定义这些扩展功能。 当我尝试在抽象类的特定子实现上调用它们时,我无法访问这些函数。 我需要做什么来解决我的问题? 我想通过能够实现这样的事情: abstract class Parent(val val1, val val2, val val3){} class Child(var val1, var val2, var val3) : Parent(val1, val2, val3){} class Child2(var val1, var val2, var val3) : Parent(val1, val2, val3){} 父母和所有孩子的扩展方法: fun Parent.convertToChild2( ): Child2? { return //some creation method of Child2 } 我想能够调用这个: child: Child child.convertToChild2 我在单独的文件中定义了所有类,并且在其他文件中定义了扩展功能。 我不能访问这样的功能 […]

Kotlin扩展功能

考虑到这一点: MyView.setVisibility(View.VISIBLE) 可以简化为: inline fun View.setVisible() = apply { visibility = View.VISIBLE } MyView.setVisible() 或者,如果你喜欢: inline infix fun View.vis(vis: Int) = apply { visibility = vis } MyView vis View.VISIBLE 有没有这样做的完成相同: MyView.VISIBLE

如何在Kotlin android的扩展函数中访问同名的类成员

我是新的android的kotlin。 我想访问在扩展函数中具有相同名称的类成员。 例如: var visibility = null //class level variable //EXTENSION FUNCTION fun ProgressBar.changeVisibleState(flag: Boolean) { if (flag) visibility = View.VISIBLE else visibility = View.INVISIBLE } 我如何访问changeVisibleState方法中的visibility 。

调用kotlin扩展函数时获取NoClassDefFoundError

我正在使用Android Studio 3.0 Beta 2 Canary Preview,并且正在从Java调用Kotlin扩展函数: Kotlin代码: fun Metadata.validate(context: Context) { validateInnerList(context) // other validation functions } private fun Metadata.validateInnerList(context: Context) { taskGroupList.removeIf { !it.isDataValid() } // error goes here } java代码: metadataDecoratorKt.validate(metadata, context); 代码编译好,但在运行时调用它给了我一个 – java.lang.NoClassDefFoundError 我做错了什么? Intellij方面有错误吗? 如果需要更多信息,请这样说。

在Kotlin中设置Guice绑定

我想设置Guice绑定,所以我创建了一个完美的Java模块: public class CrashLoggerModule extends AbstractModule { @Override public void configure() { bind(CrashLogger.class).to(ConcreteCrashLogger.class); } } 然后我把这个代码转换成Kotlin: public class CrashLoggerModule : AbstractModule() { override fun configure() { bind(javaClass<CrashLogger>()).to(javaClass<ConcreteCrashLogger>()) } } 不幸的是,这个类的Kotlin版本不再工作了。 发生这种情况是因为Kotlin将其内部方法称为public fun <A, B> A.to(that: B): Pair<A, B>而不是LinkedBindingBuilder<T>.to(Class<? extends T> c) Guice绑定没有正确设置。 我怎样才能明确指出,我想使用类方法,而不是扩展功能?