Tag: 泛型

我如何创建一个泛型类型的实例?

我知道这个问题已经被问过,但是我还没有解决。 我想通过泛型创建一个类的实例。 我试过这个: Class<VH>::getConstructor.call(parameter).newInstance() 但是,我得到这个错误: I get this error for this method: Callable expects 2 arguments, but 1 were provided. 我也试过这个方法: inline fun <reified VH> create(): VH { return VH::class.java.newInstance() } 但是,我无法调用它,因为我不能使用通用类型作为通用类型。 这种方法也不起作用: fun <VH> generateClass(type: Class<VH>): VH { return type.newInstance() } 就像我这样调用它时: generateClass<VH>(Class<VH>::class.java)我得到这个错误: Only classes are allowed on the left handside of a class […]

是否有可能在when语句中返回与type参数相同的类型

例如: fun <T> f(a: T): T = when (a) { a is Int -> 0 // if T is Int, then return Int a is String -> "" // if T is String, then return String else -> throw RuntimeException() // Otherwise, throw an exception so that the return type does not matter. } 它给编译错误: […]

具有通用二维数组的通用函数

怎样才能实现一个通用的函数,创建一个空的通用二维数组? 在下面的代码示例中创建一个空的一维数组,并具有预期的类型。 但是,当我打电话test2D我得到一个错误: java.lang.ClassCastException: [[Ljava.lang.Object; cannot be cast to [[Ljava.lang.Integer; inline fun <reified T> make1D(mask: Array<T>) : Array<T> { val res : Array<T> = arrayOf() return res } @Test fun test1D() { val a : Array<Int> = arrayOf(0) val b : Array<Int> = make1D(a) assertEquals(0, b.size) } inline fun <reified T> make2D(mask: Array<Array<T>>) : Array<Array<T>> […]

RxKotlin:试图添加自定义错误捕获

我试图写我自己的RxKotlin扩展函数,这将使Observable处理特定的错误类型( Throwable子类)与一个作为参数传递的处理程序,不会发出更多的项目。 大理石图将是: — a — b — c — error : T [ handleError<T>(handler) ] — a — b — c — finished | handler(error) 我写了以下内容: public inline fun <reified E : Throwable, R> Observable<R>.handleError( crossinline handler: (E) -> Unit ) = onErrorResumeNext f@{ return@f when (e) { is E -> { handler(e); Observable.empty() […]

改进泛型类型的调用方法

例如,是否可以创建通用类型的调用? @POST("/service/") fun<T> startRequest(@Body loginReq: Any): Call<T> 那么就像这样调用它 val request = api.startRequest<MyModel_1>(loginReq) 当我这样写和运行的方法,它说: java.lang.IllegalArgumentException: Method return type must not include a type variable or wildcard: retrofit2.Call<T>

Java将特定类的列表添加到java.lang.Object列表中,与java 8 streams一起工作 – 为什么?

public class Test { static List<Object> listA = new ArrayList<>(); public static void main(final String[] args) { final List<TestClass> listB = new ArrayList<>(); listB.add(new TestClass()); // not working setListA(listB); // working setListA(listB.stream().collect(Collectors.toList())); System.out.println(); } private static void setListA(final List<Object> list) { listA = list; } } 为什么它与流一起工作,并不适用于简单的设置?

如何将Class <?>转换为Class <T>?

我有Class<?>字段的类。 我有一个方法,它必须在Jackson的帮助下将字符串投射到对象上。 private Class<?> myType = …; private String jsonRepresentationOfObject = ….; ObjectMapper mapper = new ObjectMapper(); public <T> T get() { return mapper.readValue(jsonRepresentationOfObject, myType); } 有没有可能将myType为T ? 或者这是不可能的,因为类型擦除?

如何用IntelliJ模仿C ++风格的“自动”式演绎?

在Java的一些应用程序中,我错过了C ++中的“auto”关键字。 不要误解我的意思,这绝对不是关于语言哲学或编程实践的讨论。 例如,如果我有一个Map of Map,并且想要关联的入口集,那么代码如下所示: Map<String, Map<String, VeryLongClassNameGetsEvenLongerAndLonger>> map = new HashMap<>(); Set<Map.Entry<String, Map<String, VeryLongClassNameGetsEvenLongerAndLonger>>> entryset = map.entrySet(); 现在输入变量“entryset”是非常尴尬的输出和得到正确的。 在C ++中,我会在这里使用auto。 这在Java中不存在,所以我使用IntelliJ IDE提供的下一个最好的东西。 我输入 Integer entryset = map.entrySet(); 这显然是不正确的,但是这提示IntelliJ向我建议: Change variable 'entryset' type to 'Set<Map.Entry<String, Map<String, VeryLongClassNameGetsEvenLongerAndLonger>>> 所以我只是按Alt-Enter,它是自动更正。 但是,我想知道:我可以这样做,而不通过纠正功能? 像“自动完成类型”-Hotkey,或者是/ auto / pragma或者什么东西?

我怎样才能实例java类像A:扩展B在kotlin中实现C.

我有这样的Java类: public class SomeClass<T extends ClassA & InterfaceA> { public SomeClass(T a, T b) {} } class A extends ClassA implements InterfaceA{} class B extends ClassA implements InterfaceA{} 我试图在下面的kotlin中创建SomeClass的一个实例,但我得到一个编译错误: “感染类型Any!不是ClassA的子类型” 但我知道如何解决它。 下面的A和B扩展了ClassA并实现了InterfaceA 。 val someClass = SomeClass(A(), B()) 有人可以帮忙吗?

只有类允许在类文字的左侧

在StackOverflow中我知道很多类似的问题,但没有解决我的问题。 我有一个通用的数据类: data class ServiceCall<out T>(val result: T?, val exception: String?, val pagination: String?, val stringResult: String?) 我正在尝试像这样使用: Gson().fromJson(json, ServiceCall<SurveyListModel>::class.java).result IDE显示错误: 在类文字的左侧只允许使用类 如何解决这个问题? 提前致谢。