如何在Kotlin中实例化对象?

我正在尝试创建一个像这样的Fade对象 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val fade: Fade trans.setOnClickListener(View.OnClickListener { fade.setDuration(5000) }) 但它给了我一个错误, `variable fade must be initialized` 如何初始化像Fade fade= new Fade()在kotlinvariables?

inheritance基本活动的导航抽屉

所以这个想法是通过导航抽屉来切换活动。 我创建了基本活动( TestActivity )与导航抽屉,它工作正常(它切换到其他活动正确)。 我希望所有活动都具有相同的抽屉式导航栏,但每个活动都需要有自己的应用栏。 但是我得到这个错误: 这个Activity已经有一个窗口装饰提供的操作栏。 请勿在您的主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以代替使用工具栏。 。 它显示了当我打开一个基于TestActivity的活动。 我试图改变这第二个活动的主题为android:theme=”@style/AppTheme.NoActionBar”但是当我这样做,它只是停留在没有操作栏,它不会从TestActivityinheritance任何东西。 我正在使用Kotlin和Anko库。 open class TestActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { val Ui by lazy { NavDrawerComponent() } lateinit var drawer: DrawerLayout lateinit var toogle: ActionBarDrawerToggle lateinit var navigation: NavigationView lateinit var toolbar: Toolbar override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_test2) Ui.setContentView(this) toolbar = Ui.customToolbar setSupportActionBar(toolbar) drawer […]

从任何地方引用项目目录

我目前正在intellij编写一个Java / kotlin项目,并且必须使用文件读取器来获取XML和其他基于文本的文件。 我已经做了一个名为文件的目录,我存储所有必要的文件。 我的问题是,我需要为每个方法调用引用文件目录,因为它是不同的,取决于从哪个目录调用的方法调用一个新的路径。 有没有办法引用项目的根目录或文件目录,并使其无处不在,像System.getDirectory(“文件”或“根”)等 我目前正在使用System.getProperty(“user.dir”),但是这个路径是主观的被调用的地方,因此不是我正在寻找的。

可靠地测量JVM分配

我有两个相同的算法的实现。 我想validation他们是否使用了比所需更多的内存,换句话说,他们分配完全相同数量的对象。 我目前的解决方案是通过threadMXBean.getThreadAllocatedBytes(threadId)来测量过程之前和之后分配的字节数,并将其用作内存占用量的近似值。 问题是这个方法是不稳定的,有时它会返回比它应该更多的数字。 它特别显示了不分配对象的算法。 一个有问题的例子是一个总和int[] 。 实际代码(Kotlin): class MemAllocationTest { private val threadMXBean = (ManagementFactory.getThreadMXBean() as? com.sun.management.ThreadMXBean) ?: throw RuntimeException(“Runtime does not support com.sun.management.ThreadMXBean”) /** * May run [block] several times * */ private inline fun measureAllocatedBytes(block: () -> Unit): Long { val threadId = Thread.currentThread().id val before = threadMXBean.getThreadAllocatedBytes(threadId) block() val after = […]

Dagger2不能访问为空。 未findjavax.annotation.Nullable

我有一个模块来提供一个Retrofit界面。 @Module class NetModule(val base: String) { @Provides @Singleton fun provideOkHttpClient(): OkHttpClient { return OkHttpClient.Builder() .addInterceptor(object: Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val request = chain.request() info(“Request for ${request.url()}”) return chain.proceed(request) } }).build() } @Provides @Singleton fun provideGson(): Gson { return GsonBuilder() .enableComplexMapKeySerialization() .serializeNulls() .setPrettyPrinting() .setLenient() .create() } @Provides @Singleton fun provideRetrofit(OkHttpClient: OkHttpClient, […]

数据绑定:带有lambda值的ObservableField不能编译

我试图通过计算将一个参数作为参数的lambda来定义View的可见性。 顺便说一下 , 我正在使用Kotlin 。 在我的ViewModel我有: val customerPropVisibility: ObservableField<(KProperty1) -> Int> = ObservableField( { _ -> // body of the lambda }) 该View的绑定expression式如下所示: android:visibility=”@{vm.customerPropVisibility.invoke(title)}” vm和title被正确地声明为布局data标签中的variables。 在编译时,我得到两个错误: 1)不兼容的types:对象不能转换为Function1 2)不兼容的types:对象不能被转换为整数 第一种types只有一个错误,第二种types有几个错误。 第二种types的错误数量与布局xml文件中lambda的调用数量相同。 我试图解决这个问题: 显然,types1的错误可以通过重写ObservableField的get()方法来解决(使方法明确地返回Function1 )。 这是有效的,但是很难看,编译器在推断customerPropVisibility的types时应该这样做。 当然,这里有些不对劲。 types2的错误对我来说是一个谜,导致函数types(my lambda)显式地返回Int。 我认为这与Kotlin / Java的互操作性有关。 如果您遇到同样的问题,请分享解决问题的经验。 编辑: 由于这个bug还没有解决,我使用稍微不同的方法来达到相同的结果: 而不是将ObservableField的值设置为lambda,我将其设置为函数引用( ::getVisibility ),如下所示: fun getVisibility(prop: KProperty1): Int = propVisibilityValues[prop] ?: View.GONE val […]

Kotlin:列表中BigDecimal的和

我有一个我想要过滤的列表,然后返回一个id与金额总和的地图: val totalById = list .filter { it.status == StatusEnum.Active } .groupBy { it.item.id } .mapValues { it.value.sumBy { it.amount } } “it.amount”是BigDecimal,但看起来像sumBy只是Int。 对于Java 8,它会是: Collectors.groupingBy(i-> i.getItem().getId(), Collectors.mapping(Item::getAmount, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add)))) Kotlin有没有办法做到这一点?

我可以在Kotlin中使用Dagger 2的现场注射吗?

我发布了一个问题( Dagger 2不会生成组件类(Android,Kotlin) ),经过一些实验,似乎问题可能是由于Kotlin隐藏了该字段。 class CoffeeShop { @Inject var TheCoffee:Coffee? = null; } 错误信息是, :app:kaptDebugKotline: …\CoffeeShop.java:7: error: Dagger does not support injection into private fields e: private ….Coffee TheCoffee; TheCoffee在我的源代码中不是私有的。 但我认为Kotlin可能是翻译 class CoffeeShop { @Inject var TheCoffee:Coffee? = null; } 转换成Java代码 class CoffeeShop { @Inject private Coffee TheCoffee = null; public Coffee getTheCoffee(); public void […]

将ByteArrayOutputStream转换为Kotlin中的json

我试图创建一个2服务的资源,1在application / x-www-form-urlencoded和字符串有效载荷和其他应用程序/ json格式与json正文。 我有这个代码: @POST @Path(“/test”) fun test(@Context request: ContainerRequest): Response { val baos = ByteArrayOutputStream() request.entityStream.use { it.copyTo(baos) } val ipnRawData = baos.toString() var map : Map map = when (request.headers.getFirst(“Content-Type”)) { “application/json” -> objectMapper.convertValue(ipnRawData,Map::class.java) as Map “application/x-www-form-urlencoded” -> LinkedHashMap() else -> throw UnsupportedOperationException() } //….handle the map return Response.status(200).build() } 但是,当我尝试运行它与json选项,和身体: {“name” […]

我可以转换模板expression式中的字符串还是kotlin中的lambdaexpression式?

我可以转换模板expression式中的字符串还是kotlin中的lambdaexpression式? val tm = “x = $”+”x” val fn: (x: String) -> String = { it -> tm} val str = fn(“This is X!!!”) 需要得到 x =这是X! 为什么?:您可以接收模板,例如,从数据库PS:或您的建议