所以我制作了一个通用列表,如果我将它们转换为(T),它只接受字符串。这是我的代码:
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, "\")) & "test.bat"
当我想添加int 25时,即使我将其转换为(T),这也会给我一个错误。如果它是通用列表不应该采取我给它的任何东西?请帮助,提前谢谢
答案 0 :(得分:2)
您无法将原始 int 转换为(T),尝试将整数转换为(T)
list.add((T)((Integer)25));
(由于automatic boxing,您可以将原始 int 转换为整数,如((整数)25)。)
答案 1 :(得分:0)
我认为你误解了'泛型'你的清单的一部分。你认为它是一个列表普通对象,它不是。这是一个' T'对象,其中T是Exercise04类的通用参数。
我想要存储一个&#39; stuff&#39;列表,如字符串和整数,您需要使用List<Object>
。
要将整数放入列表中,您可以执行以下操作:
List<Integer> iList = new ArrayList<>();
list.add(100);
因拳击而起作用。但是你不能把字符串放进去。
否则,&#39; T&#39;您的案例将由实例化您的Exercise04类的人定义。
答案 2 :(得分:0)
错误的原因是因为你以一种糟糕的方式实现泛型类......
如果你在一个好的IDE中编码,你应该至少得到一个警告,比如
Exersise04是原始类型。参考通用类型Exersise04 应该参数化
这是因为你定义了类泛型,但是你实现它就像:
public static void main(String[] args) {
new Exersise04();
}
这意味着, Exersise04 不知道在宣布时持有什么......(不好,不好做法)
尝试改为
public class Exersise04<T> {
public static void main(String[] args) {
new Exersise04<String>();
}
public Exersise04() {
List<T> list = new ArrayList<>();
list.add((T) "Hello");
list.add((T) 25);
}
}
然后你会看到你的编译器会在这里抱怨
list.add((T) 25);
因为现在我们都确定,这个类只保留允许String对象
无法从int转换为T
答案 3 :(得分:0)
你只需声明一个对象列表(所有对象的母亲)
List<Object> list = new ArrayList<Object>();
list.add((T)"Hello");
list.add((T)25);