例如,给定一个Class<T>,如何调用/调用需要Class<T> where T : Enum<T>的方法/构造函数
fun <T : Any> handleAny(classOfT: Class<T>) {
if (classOfT.isEnum) {
handleEnum(classOfT)
}
}
fun <T : Enum<T>> handleEnum(classOfT: Class<T>) { /*...*/ }
错误:inferred type T i
我偶然发现了以下代码:
class SalutationConverter : EnumTypeConverter<Salutation>({ enumValueOf(it) })
在Kotlin中,曲线大括号{}被称为“匿名函数”吗?
EnumTypeConverter的声明如下所示:
open class EnumTypeConverter<T : Enum<T>>(private val enumValueOfParser: ((String) -> T)) {
@TypeConverter
fun enumTypeToStri
如何为Kotlin中的枚举自定义toString()方法?
enum class GuideType(type: String) {
DEF_TYPE("default"),
override fun toString(): String {
return type // not working!
}
}
背景:我是kotlin的新手,有一些java方面的经验。
问题:--我正在通过kotlin教程来了解集合和使用sort*函数的方法,但我对语法感到困惑。
使用kotlin sortedByDescending函数编写的代码:
// Return a list of customers, sorted in the descending by number of orders they have made
fun Shop.getCustomersSortedByOrders(): List<Customer> =
customers.sortedByDescendi
我的软件的一部分是使用反射。我遇到的问题是,虽然我可以获得属性的类型,但我不能使用Type从PropertyInfo转换字符串值。这就是为什么我在示例代码中使用t的原因。
下面的代码演示了错误消息作为代码注释的问题。语法错误在t上。我怎样才能解决这个问题?谢谢
class Program
{
static void Main(string[] args)
{
Type t = typeof(Letters);
Letters letter = "A".ToEnum<t>(); //-- Type or namespa
在Swift中,可以使用泛型类型创建枚举,以便错误响应可以只返回成功案例或失败案例。所以我可以声明:
/// An enum that boxes API results as either success or failure cases.
public enum APIResult<T>
{
/// The request succeeded with data.
case success(data: T)
/// Encapsulates the type of error along with optional user-facing descri
有没有办法在Kotlin中的数据类中嵌套枚举?
data class D(val a:Any) {
enum class E {F,G}
...
}
或者在函数中以内联方式声明它?
fun foo() {
enum class E {F,G}
doSomething()
}
我找不到关于允许在何处声明枚举的规则的文档。
我已经创建了这个扩展方法,它从KClass<T>中获取所有属性
可拓方法
@Suppress("UNCHECKED_CAST")
inline fun <reified T : Any> KClass<T>.getProperties(): Iterable<KProperty1<T, *>> {
return members.filter { it is KProperty1<*, *> }.map { it as KProperty1<T, *> }
}
示例用法
data clas
我对Kotlin很陌生。我看了Kotlin的源代码,看到了这个原型:
public inline fun <S, T : S> Iterable<T>.reduce(operation: (acc: S, T) -> S): S
我知道运算是一种方法,'acc‘是它的参数之一,'acc’是S型的,而运算的返回值是S型的,但是,参数列表中的T是什么意思呢?它的论点在哪里?
我正在尝试用Kotlin语言为我的android项目实现一些特殊的GSON TypeAdapter。
我面临问题是编译错误,无法推断类型:Type inference failed: 'T' cannot capture 'in (T..T?'. Type parameter has an upper bound 'Enum<T>' that cannot be satisfied capturing 'in' projection
代码如下:
class SmartEnumTypeAdapterFactory(f
我知道在枚举类上调用.values()会给出一个枚举案例数组。但是,它不能与泛型枚举类一起工作。为什么会这样,我可以做些什么来获得相同的功能?
class EnumEditActivity<E: Enum<E>>() {
var value: E? = null
var allValues: Array<E> = E.values()
}
如果我在一个普通的枚举上调用values(),它可以很好地工作:
enum class Gender {
male, female
}
for (value in Gender.value
我正在尝试使用java.util.function.Function<T, R> 2019.3 Kotlin多平台库将函数转换为Kotlin函数。
但是我找不到一种方法在kotlin中做一个等价的函数。我可以看到有Function1可以执行java互操作性,但是我不能从导入kotlin.jvm.function进行任何导入。
我第一次尝试Kotlin。有人能告诉我我做错了什么吗。
更新-请看我的java代码
进口java.util.function.Function;
public class A {
Function<String, String> funct
我想用一个泛型类型声明一个函数,这个泛型类型必须从另一个应该是接口的泛型类型和其他类继承。但是Kotlin抱怨我不让我这么做。
class SomeClass<T: SomeInterface> {
fun <R>someFunktion(task: R) where R : SomeOtherClass, R : T {}
}
如果我只是将函数声明中的泛型类型T替换为SomeInterface,它就能工作。
class SomeClass<T: SomeInterface> {
fun <R>someFunktion(ta
在Kotlin中,我试图编译以下内容:
给定与泛型类型的接口(打印机)
以及该接口的两个实现(DogPrinter和CatPrinter)
根据外部变量(AnimalType)返回一台打印机
以下代码不编译,因为在以下位置需要类型:fun getMapper(animalType: AnimalType): Printer
我试着使用<Any>或<*>,但没有成功。有人能帮忙吗?
(通过将下面的代码复制到中很容易看到错误
enum class AnimalType {
CAT, DOG
}
class Dog
class Cat
inte
我知道用Java编写静态泛型方法是可能的。
我试图在Kotlin实现我自己的解决方案,但失败了。
class Wrapper<T>
{
companion object <T> // error: Type parameters are not allowed for objects.
{
private var value: T? = null
// implement some methods
}
}
有没有办法在Kotlin中实现静态泛型方法?
我正在学习kotlin,我想了解如何实现从java到kotlin的以下代码:
private Question[] questions = new Question[] {
new Question(R.string.question_a, true)
new Question(R.string.question_b, false)
};
public class Question {
private int resultId;
private boolean answerT;
public Question(int resId, boolean theAns
我能实例化一个在Kotlin中使用递归泛型的具体Java类吗?如果是,那么如何实现?
详细信息
我正在尝试实例化一个使用递归泛型的Java类,类似于下面的示例。我找到了将Java类封装在一个新类中的工作,但这感觉就像我在回避一个我应该能够直接处理的问题。
具有递归泛型的Java类
public class MyLegacyClass<T extends MyLegacyClass<T>> {
// implementation ...
}
如何在Java中实例化
// In Java we just ignore the generic type...
MyLe
Kotlin码:
class Inva<T>{
fun <T> x(y:T) {}
}
fun main(args: Array<Integer>) {
var inva = Inva<Int>()
inva.x(“123”)
}
Java等效:
public class Vab<T> {
void x(T y) {}
public static void main(String[] args) {
Vab<Integer> vab = new Vab<I