gpt4 book ai didi

java - 将对象转换为通用类型以返回

转载 作者:行者123 更新时间:2023-12-01 18:06:04 25 4
gpt4 key购买 nike

有没有办法将对象转换为方法的返回值?我尝试了这种方法,但它在“instanceof”部分给出了编译时异常:

public static <T> T convertInstanceOfObject(Object o) {
if (o instanceof T) {
return (T) o;
} else {
return null;
}
}

我也尝试过这个,但它给出了运行时异常,ClassCastException:

public static <T> T convertInstanceOfObject(Object o) {
try {
T rv = (T)o;
return rv;
} catch(java.lang.ClassCastException e) {
return null;
}
}

有没有一种可能的方法可以轻松做到这一点:

String s = convertInstanceOfObject("string");
System.out.println(s); // should print "string"
Integer i = convertInstanceOfObject(4);
System.out.println(i); // should print "4"
String k = convertInstanceOfObject(345435.34);
System.out.println(k); // should print "null"

编辑:我写了正确答案的工作副本:

public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
try {
return clazz.cast(o);
} catch(ClassCastException e) {
return null;
}
}

public static void main(String args[]) {
String s = convertInstanceOfObject("string", String.class);
System.out.println(s);
Integer i = convertInstanceOfObject(4, Integer.class);
System.out.println(i);
String k = convertInstanceOfObject(345435.34, String.class);
System.out.println(k);
}

最佳答案

由于编译期间泛型类型删除,您必须使用 Class 实例。

public static <T> T convertInstanceOfObject(Object o, Class<T> clazz) {
try {
return clazz.cast(o);
} catch(ClassCastException e) {
return null;
}
}

that method的声明是:

public T cast(Object o)

这也可以用于数组类型。它看起来像这样:

final Class<int[]> intArrayType = int[].class;
final Object someObject = new int[]{1,2,3};
final int[] instance = convertInstanceOfObject(someObject, intArrayType);

请注意,当 someObject 传递给 convertToInstanceOfObject 时,它具有编译时类型 Object

关于java - 将对象转换为通用类型以返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60556637/

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