gpt4 book ai didi

java - 通用辅助方法与直接类转换?

转载 作者:行者123 更新时间:2023-12-01 10:22:01 26 4
gpt4 key购买 nike

我现在就是这样做的。

static <T extends Some> T doSome(Class<T> type, T obj) {
// pre-existing legacy method
// omitted for brevity
}

private static <T extends Some> T doSomeHelper(Class<T> type, Some obj) {
// private!
// only invoked from doSome(T)
return doSome(type, type.cast(obj));
}

@SuppressWarnings("unchecked")
static <T extends Some> T doSome(T obj) {
return (T) doSomeHelper(obj.getClass(), obj);
}

我刚刚发现下面的方法编译器也没有问题。

@SuppressWarnings("unchecked")
public static <T extends Some> T doSome_(T obj) {
return doSome((Class<T>) obj.getClass(), obj);
}

哪种方法更好?

最佳答案

第一种方法更好,因为所有类型在理论层面上都是正确的。

第二种方式, Actor (Class<T>) obj.getClass()理论上是不正确的。 obj的实际运行时类可以是 T 的任何子类型,因此 obj.getClass()可以是Class<some subtype of T> ,与 Class<T> 不兼容。由于类型删除,强制转换实际上不会在运行时失败,但您不应该编写理论上不正确的代码。

关于java - 通用辅助方法与直接类转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35534060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com