这是一个变量Class<?> cls,现在我想得到另一个Array Class Object组件类型cls.
例如,如果cls= String.class,我想得到String[].class; if cls= int.class,我想知道int[].class,我该怎么办?
你看,这是很容易得到String.class来自String[].class:
Class<?> arrayCls = String[].class;
if(arrayCls.isArray()){
Class<?> cls = arrayCls.getComponentType();
}
Run Code Online (Sandbox Code Playgroud)
但我找不到简单的方法来做相反的事情.
这是一个可能的解决方案:
Class<?> clazz = String.class;
Class<?> arrayClass = Array.newInstance(clazz,0).getClass();
Run Code Online (Sandbox Code Playgroud)
请问有什么打击方法吗?
使用varargs时,结果数组的组件类型是如何确定的?
例如,该程序是否保证打印true或在技术上未指定其行为?
public static void main(String[] args) {
foo("", 0);
}
static <T> void foo(T... arr) {
System.out.println(arr.getClass() == Serializable[].class);
}
Run Code Online (Sandbox Code Playgroud) 有谁知道写下面语句的更好方法:
example.mySpecialMethod(new MySpecialClass[0].getClass())
Run Code Online (Sandbox Code Playgroud)
我需要数组类型,但我不知道是否有更好的解决方案.目前这个例子适合我,但也许有人知道一个更好的方法来做同样没有new关键字.
我尝试在解析 json 时使用具体化类型。它可以完美地处理单个 json 条目,但无法处理列表。
问题:
package qa
import com.fasterxml.jackson.databind.ObjectMapper
import org.slf4j.LoggerFactory
import org.testng.Assert
import org.testng.annotations.Test
class ReifiedParseListTest {
data class User(var name: String = "userName", var age: Int = 0)
val log = LoggerFactory.getLogger(this.javaClass.name)
val objectMapper = ObjectMapper()
val json: String = """[{"name":"Alice","age":1},{"name":"Bob","age":2}]"""
val expected: String = "[User(name=Alice, age=1), User(name=Bob, age=2)]"
inline fun <reified V> String.parseList(): List<V> = objectMapper
.readValue(this, Array<V>::class.java).toList()
@Test
fun checkParseList_OK() {
val actual: List<User> = objectMapper
.readValue(json, Array<User>::class.java).toList()
log.info("actual.first() …Run Code Online (Sandbox Code Playgroud) 我使用以下技巧来获取特定类的数组类型:
@SuppressWarnings("unchecked")
public static <T> Class<T[]> getArrayType(Class<T> componentType) {
String arrayClassName = "[L" + componentType.getName() + ";";
try {
return (Class<T[]>) Class.forName(arrayClassName);
} catch (ClassNotFoundException e) {
throw new UnexpectedException("Can't get the array type for " + componentType, e);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,有没有更优雅的方式来获得这个?
我能Class<T>来Class<T[]>吗?
public static <T> void doSometing(final Class<T[]> arrayType) {
final Class<T> elementType; // = @@?
}
Run Code Online (Sandbox Code Playgroud)
或者,我可以Class<T[]>从中获得Class<T>吗?
java ×5
arrays ×3
class ×3
generics ×2
kotlin ×1
kotlin-reified-type-parameters ×1
new-operator ×1
reflection ×1
runtime ×1