gpt4 book ai didi

java - 泛型类型参数构造函数

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

我希望能够创建 ? 的新实例。参数化类型,但我找不到方法。

import java.util.List;
import java.util.Map;
import java.util.Set;


class Pinput {
public static void parse (String[] args, List<String> params, Map<String, ? extends List<String>> options, Set<String> flags, Set<String> flagSet){

String optionalParameterKey;
Boolean isOptionalParameter = false;

for(int n = 0; n < args.length; ++n){
String p = args[n];
if (p.charAt(0) == '-'){
isOptionalParameter = false;
if(p.length() > 1){
if(p.charAt(1) == '-' || p.length() == 2){

if(flagSet.contains(p)){
flags.add(p);
}
else{
options.put(p, ?.newInstance());
optionalParameterKey = p;
isOptionalParameter = true;
}
}
else{
for(int i = 1; i < p.length(); ++i){
flags.add("" + '-' + p.charAt(i));
}
}
}
}
else if(isOptionalParameter){
options.get(optionalParameterKey).add(p);
}
else{
params.add(p);
}
}
}
}

有什么想法吗?

最佳答案

简单地说:你不能这样做。

如果您有.class,则只能反射实例化对象它的对象,或者您可以从中检索它的类的实例。但是,如果您按如下方式更改方法签名:

public static <T extends List<String>> void parse(String[] args, List<String> params, Map<String, T> options, Set<String> flags, Set<String> flagSet, Class<T> klass)  throws InstantiationException, IllegalAccessException

然后当你调用它时添加 MyStringList.class (或者无论 map 值类型是什么),您可以将构造函数行更改为:

options.put(p,  klass.newInstance());

您的代码应该按预期工作。

编辑:

I get this => Test.java:19: illegal start of expression
Pinput.parse(args, params, options, flags, flagSet,
ArrayList<String>.class);

ArrayList<String>不扩展 List<String> , ArrayList<T>延伸List<T>String延伸Object这意味着它的有效值为 T 。这仅适用于声明为的类:

class MyStringList extends List<String>

泛型并不真正适合您想要做的事情,实际上您应该使用它作为您的签名:

public static void parse(String[] args, List<String> params, Map<String, List<String>> options, Set<String> flags, Set<String> flagSet)

并手动将列表实例化为 ArrayList :

 options.put(arg,  new ArrayList<String>());

List只是一个接口(interface),编译器知道您将提供该接口(interface)的一些实现,然后只允许您访问 List方法。

关于java - 泛型类型参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18814480/

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