Tag: 科特林

运行在Kotlin中编写的Apache Tomcat servlet时出错

当我单击工具栏上的运行绿色箭头按钮,或者从IntelliJ IDEA Ultimate的运行菜单中选择运行Tomcat 8.0.36命令,以启动我在Kotlin中编写的HTTP Servlet应用程序时,似乎服务器启动但无法加载我的应用程序。 我说因为当我点击http://localhost:8080或者我的一个servlet在http://localhost:8080/login ,我只看到一个空白页。 这里是IntelliJ的输出窗口的输出的相关摘录,当我点击运行按钮。 10-Sep-2016 15:34:05.807 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 595 ms Connected to server [2016-09-10 03:34:06,384] Artifact Server:war exploded: Artifact is being deployed, please wait… 10-Sep-2016 15:34:09.256 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) […]

Kotlin – 如何使用自定义名称制作地图代理?

我试图让我的头绕着财产代表,我有一个有趣的用例。 有没有可能有这样的事情: class MyClass { val properties = mutableMapOf() val fontSize: Any by MapDelegate(properties, “font-size”) } 这将允许我使用地图作为fontSize存储fontSize ,但使用自定义键(即“font-size”)。 如果用于存储诸如可以通过variables访问的CSS属性标记( fontSize )以用于代码的特定用例,但是在迭代地图( font-size: 18px; )时可以正确呈现。

如何以types安全的方式从通用列表中检索项目

我想把项目放在一个通用的容器中,但以types安全的方式检索它们。 容器在添加时会为每个项目添加一个序列号。 我试图在Kotlin中实现这个,但在pens()方法中遇到了问题。 有没有办法在函数参数中使用types信息来定义返回值的types? import java.util.concurrent.atomic.AtomicInteger import kotlin.reflect.KClass interface Item data class Pen(val name: String) : Item data class Eraser(val name: String) : Item data class Ref (val id: Int, val item: T) class Container { private val seq = AtomicInteger(0) private val items: MutableList<Ref> = mutableListOf() fun add(item: T) = items.add(Ref(seq.incrementAndGet(), item)) fun filter(cls: […]

确定一个实例是否是一个数据类的一个实例

鉴于以下类别 abstract class SomeAbstractClass { abstract val name: String } data class DataClass( override val name: String ) : SomeAbstractClass() class NoDataClass( override val name: String ) : SomeAbstractClass() 对于SomeAbstractClass任何实例,我可以确定它是否是一个数据类而不依赖于types检查? 一些背景:这似乎是把inheritance和数据类结合起来的最好方式, 正如不同的答案中所建议的那样 。 现在,在SomeAbstractClass的初始化块中,我想抛出一个exception,以防派生types不是数据类,以确保派生types的“正确”(不可变)实现。

异步春季启动使用Kotlin无法正常工作

我正在尝试创建一个异步执行操作的Spring服务,并返回一个ListenableFuture 。 我希望在操作失败时触发失败回调 – 我尝试这样做是使用AsyncResult.forExecutionException ,如下所示: @Service open class UserClientService { @Async fun fetchUser(email: String): ListenableFuture { val uri = buildUri(email) val headers = buildHeaders() try { val result = restTemplate.exchange(uri, HttpMethod.GET, HttpEntity(headers), User::class.java) return AsyncResult.forValue(result.body) } catch (e: RestClientException) { return AsyncResult.forExecutionException(e) } } } 入门点: @SpringBootApplication @EnableAsync open class UserProxyApplication fun main(args: Array) […]

集团捕捉

大家好,我正在努力弄清楚如何使用kotlin正则expression式的组捕获的结果,为我的生活在网上找不到任何东西。 我基本上只是想简单地去掉“k” var line = “4353453555k fgafg 4535k” line.replace(“(\\d*)[k]”.toRegex(), “replace with group capture”) 我想要的结果是: 4353453555 fgafg 4535

Kotlin – 使用“懒”与“lateinit”的属性初始化

在Kotlin中,如果您不想在构造函数或类体顶部启动类属性,则基本上有以下两个选项(来自语言参考): 延迟初始化 lazy()是一个函数,它接受一个lambda并返回一个Lazy实例,它可以作为实现一个lazy属性的委托:get()的第一个调用执行传递给lazy()的lambda并记住结果,随后的调用得到()只是返回记忆的结果。 例 public class Hello{ val myLazyString: String by lazy { “Hello” }` } 所以第一个调用和次要的调用,无论它在哪里, myLazyString都会返回“Hello” 延迟初始化 通常,声明为具有非nulltypes的属性必须在构造函数中初始化。 但是,这往往不方便。 例如,属性可以通过dependency injection来初始化,或者在unit testing的设置方法中进行初始化。 在这种情况下,你不能在构造函数中提供一个非null初始值设定项,但是当你引用一个类的内部属性的时候,你还是要避免使用null检查。 要处理这种情况,可以使用lateinit修饰符标记属性: public class MyTest { lateinit var subject: TestSubject @SetUp fun setup() { subject = TestSubject() } @Test fun test() { subject.method() } } 修饰符只能用于在类的主体内声明的var属性(不在主构造函数中),只有当属性没有自定义getter或setter时。 属性的types必须是非空的,并且不能是原始types。 那么,如何正确选择这两个选项,既然他们都能解决同样的问题呢?

如何在Kotlin中声明一个函数作为variables

所以我试图在Kotlin中创建一个监听器。 我只想传递一个将在我的代码中执行的方法。 喜欢这个: override fun setButtonClickListener(listener: (text: String) -> Unit) { this.listener = listener } 但是,当我宣布我的听众,我必须这样声明: private var listener : (text: String) -> Unit = null!! 否则,我的AS会抱怨。 但是这个 !! 在一个空对象接缝很奇怪。 我应该如何声明这个监听器? 谢谢!

在一个片段上设置LayoutManager

我创建了一个片段,我试图实现一个recyclerView并加载一个列表。 当我尝试设置layoutManager时,问题即将到来 错误: java.lang.NullPointerException:尝试在com.gn.app的空对象引用上调用虚拟方法’void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView $ LayoutManager)’。 Fragments.StationsFragment.onCreateView(StationsFragment.kt:37) 我无法弄清楚什么是错的。 分段: class StationsFragment : Fragment() { companion object { val TAG: String = StationsFragment::class.java.simpleName fun newInstance() = StationsFragment() } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { activity.title = getString(R.string.title_home) val view = inflater?.inflate(R.layout.fragment_stations, container, false) rcViewStations.layoutManager = LinearLayoutManager(activity) val retrofit = Retrofit.Builder() .baseUrl(url) […]

查找片段内部视图的宽度

我想find一个片段的视图的宽度,我已经写了下面的代码 class ExampleFragment : Fragment() { var team1_value = 0 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment val v = inflater!!.inflate(R.layout.fragment_queens, container, false) val width = v.layout_team1_picker.width.toFloat() Log.d(“width1″,”width is $width”) return v } 我得到的答案是0.0。 如果我在按钮里面做同样的事情 class ExampleFragment : Fragment() { var team1_value = 0 override […]