如果我有
public <T> doSomething(T[] array)
{
}
我怎样才能T.class
从array
?
如果我这样做array.getClass()
,那我就T[].class
代替了。
用这个:
array.getClass().getComponentType()
返回
Class
表示数组的组件类型的信息。如果此类不表示数组类,则此方法返回null
。
参考:
Class.getComponentType()
有没有一种方法可以从getComponentType()返回的Class强制转换为Class,而不会收到编译器警告?
采取这种方法:
public <T> void doSomething(final T[] array) throws Exception{
final Class<? extends Object[]> arrayClass = array.getClass();
final Class<?> componentType = arrayClass.getComponentType();
final T newInstance = (T) componentType.newInstance();
}
这是生成的字节码:
public void doSomething(java.lang.Object[] array) throws java.lang.Exception;
0 aload_1 [array]
1 invokevirtual java.lang.Object.getClass() : java.lang.Class [21]
4 astore_2 [arrayClass]
5 aload_2 [arrayClass]
6 invokevirtual java.lang.Class.getComponentType() : java.lang.Class [25]
9 astore_3 [componentType]
10 aload_3 [componentType]
11 invokevirtual java.lang.Class.newInstance() : java.lang.Object [30]
14 astore 4 [newInstance]
16 return
如您所见,参数类型被擦除为Object
[],因此编译器无法知道T是什么。是的,编译器可以使用array.getClass().getComponentType()
,但这有时会失败,因为您可以执行以下操作:
Object[] arr = new String[] { "a", "b", "c" };
Integer[] integerArray = (Integer[]) arr;
doSomething(integerArray);
(在这种情况下,array.getClass().getComponentType()
返回String.class
,但T
代表Integer
。是的,这是合法的,不会生成编译器警告。)
我正在尝试更新我编写的程序的GUI。在新的GUI上,我有一个JFrame,其中包含一个JPanel,它有一个JTabbedPane和上面的两个按钮。 在JTabbedPane中,我有三个JPanel,其中包含不同的组件。(如按钮、文本字段等)所以现在我必须让所有组件根据类型对其执行相同的操作。 如果有一个文本字段,我必须做一些事情,但如果有一个按钮,我必须做其他事情。 所以之前我做过这样的事情:
问题内容: 我需要获取行和列的2D数组的长度。我已经使用以下代码成功完成了此操作: 这将按预期打印出5、10。 现在看一下这一行: 注意,实际上我必须引用特定的行才能获取列的长度。对我来说,这似乎非常丑陋。此外,如果数组定义为: 然后,当尝试获取长度时,代码将失败。有其他方法(更智能)吗? 问题答案: 考虑 每行的列长不同。如果要通过固定大小的2D数组支持某些数据,请在包装器类中为固定值提供吸气剂
我有一个带有字符串的txt文件。我想通过文件获取包含文件中所有行的字符串数组。list(path.get(“path”))方法。 我试图使用toArray(),但它返回指向“path”目录中文件的路径数组 如何使用文件获取它。列表(路径。获取(“路径”))(这是必需的)?我有类似的东西
代码: 为什么第二个打印5而不是20?
我们的中央银行以多种方式提供货币汇率。例如,一个货币日期很容易获得:http://api.nbp.pl/api/exchangerates/rates/a/usd/2020-08-20?format=Json(它以简单的大括号开始{作为典型的Json) 但是另一个表-每个货币日期:http://api.nbp.pl/api/exchangerates/tables/a/2020-08-20?for
问题内容: 我需要Java中的一个源包中包含的所有类文件的Class []。 我找不到一次就能做到的标准方法。如果有人可以编写函数来获取该列表,则将非常有帮助。 问题答案: 我可以使用普通文件I / O和搜索机制解决此问题。您可以查看此处发布的答案。