Tag: kotlin

在Kotlin中使用BufferedReader的最佳方式

所以我刚刚开始使用Kotlin for Android(希望它可以帮助我使用Swift),并将Android Java代码转换为Kotlin。 在其中一个转换中,我偶然发现了一个BufferedReader,我通常会用Java编写(或者说C#),如下所示: String result = ""; String line = ""; BufferedReader reader = new BufferedReader(someStream); while ( (line = reader.readLine()) != null ) { result += line; } 但是在Kotlin中,似乎Kotlin不允许我在条件的情况下给变量赋值。 目前,我已经编写了如下代码: val reader = BufferedReader(someStream) var line : String? = "" while (line != null) { line = reader.readLine() result += line } […]

Kotlin反射地调用getter / setter

初学者在Kotlin这里。 我尝试通过在程序中反射来创建和填充对象。 我无法在纯kotlin中找到等价的功能,所以我的解决方案类似于下面的代码,它的工作正常,但需要使用像java.lang.String::class.java这样的dirty参考,可以理解,似乎不喜欢这个。 有没有更简单的方法,我失踪要做到这一点? val jclass = myObject::class.java val setters = jclass.declaredMethods.filter { it.name.startsWith("set") } for (s in setters) { val paramType = s.parameterTypes.first() val data = when(paramType) { java.lang.Integer::class.java -> foo java.lang.Double::class.java -> bar java.lang.String::class.java -> baz } s.invoke(myObject, data) }

在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绑定没有正确设置。 我怎样才能明确指出,我想使用类方法,而不是扩展功能?

释放kotlin中的变量

在kotlin中,为了编写测试,我在setUp阶段的每个测试之前创建了一个guice注入器,然后尝试在tearDown阶段释放它: class MyTestClass { …. var injector: Injector? = null … @Before fun setUp() { … injector = Guice.createInjector(modules) … } @After fun tearDown() { … injector = null } @Test fun myFirstTest() { myInstance = injector?.getInstance(Key.get(MyClass::class.java)) // use myInstance here … } … } 我的问题是,在Kotlin的土地上,这样的必要性是不是必需的? 如果有必要,最好的办法是什么?

Java与Kotlin泛型

我有下面的Java类,我试图转换为使用泛型的Kotlin。 抽象类MvpViewHolder,M,V:View?>(itemView:View):RecyclerView.ViewHolder(itemView){ public abstract class MvpViewHolder<P extends BasePresenter> extends RecyclerView.ViewHolder { protected P presenter; public MvpViewHolder(View itemView) { super(itemView); } public void bindPresenter(P presenter) { this.presenter = presenter; presenter.bindView(this); } public void unbindPresenter() { presenter = null; } } 这是我的Kotlin尝试 abstract class MvpViewHolder<P : BasePresenter>(itemView: View) : RecyclerView.ViewHolder(itemView) { protected var presenter: P? = null […]

Kotlin + Dagger 2:Dagger *文件不会生成

我第一次开始使用Kotlin和Dagger 2。 我认为所有东西都和Java一样,但显然不是。 匕首不会为我生成Dagger *文件。 这是我的代码: 组件: @PerActivity @Subcomponent(modules = arrayOf(ApplicationModule::class)) interface ActivityComponent { fun inject(app: OneAccountApplication) } @Singleton @Component(modules = arrayOf(ApplicationModule::class)) interface ApplicationComponent { fun inject(syncService: SyncService) @ApplicationContext fun context(): Context fun application(): Application fun ribotsService(): OneAccountService fun preferencesHelper(): PreferencesHelper fun databaseHelper(): DatabaseHelper fun dataManager(): DataManager } @ConfigPersistent @Component(dependencies = arrayOf(ApplicationComponent::class)) interface ConfigPersistentComponent { […]

将静态变量从Java转换为Kotlin

我试图将下面的代码转换为Kotlin,并仍然有一个由Java使用的类(Foo)。 什么是做这种转换的正确方法? 原始Java: public class Foo { public static final String C_ID = "ID"; public static final String C_NAME = "NAME"; public static final String[] VALUES = {"X", "Y", "Z"}; public static String[] getAll() { return new String[] {C_ID, C_NAME}; } } public class Bar { public void doStuff() { String var1 = Foo.C_ID; String[] […]

与日食弹簧kotlin

我已经试过春季启动springtest,Kotlin日食简单的网络。 对于Java类,它可以进行热部署。 但不适用于Kotlin文件。 pom.xml几乎完全来自http://start.spring.io/,除了添加springloaded。 <build> <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory> <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build>

Android Studio 3.0 + Kotlin两个Gradle守护进程

Android Studio 3.0(Beta 7)在使用Java + Kotlin编译产品时是否正常运行2个gradle守护程序? 只是建立一个项目而消耗大量的资源 更新10/27/17我已经更新了Android Studio 3.0,但得到两个Gradle Daemon,我认为其他守护进程是Kotlin编译器,因为它说kotlin-compiler-embedabble-1.1.51.jar 。 但为什么它需要有一个单独的过程…

将Python代码转换为Kotlin

我发现代码生成n个不同的颜色 。 我拿了代码,并从中做了一个课 import colorsys import itertools from fractions import Fraction class DistinctColorsGenerator: def __init__(self): self._bias = lambda x: (math.sqrt(x / 3) / Fraction(2, 3) + Fraction(1, 3)) / Fraction(6, 5) self._gen_rgb = lambda x : colorsys.hsv_to_rgb(*x) self._flatten = itertools.chain.from_iterable self._hsvs = lambda: self._flatten(map(self._hsv, self._fracs())) self._rgbs = lambda: map(self._gen_rgb, self._hsvs()) self._gen_colors = lambda: map(self._gen_color, self._rgbs()) […]