Java 为数据结构定义泛型/变量类型
我有一个数据结构(Java 为数据结构定义泛型/变量类型,java,generics,type-conversion,Java,Generics,Type Conversion,我有一个数据结构(LinkedHashMap),但问题是(第二个)值应该是变量类型,因为我可以将类型String或类型int或任何基元类型放在那里,所以我的问题是: 有没有一种方法可以为它定义一个可以获取任何值类型的变量类型 这就是我所拥有的: private LinkedHashMap<String, String> keyVal; private-LinkedHashMap-keyVal; 我想要这样的东西: private LinkedHashMap<String,
LinkedHashMap
),但问题是(第二个)值应该是变量类型,因为我可以将类型String
或类型int
或任何基元类型放在那里,所以我的问题是:
有没有一种方法可以为它定义一个可以获取任何值类型的变量类型
这就是我所拥有的:
private LinkedHashMap<String, String> keyVal;
private-LinkedHashMap-keyVal;
我想要这样的东西:
private LinkedHashMap<String, anyValue> keyVal;
private-LinkedHashMap-keyVal;
泛型类型不能是基元类型。如果您希望能够在地图中存储任何内容,可以将地图的“值”通用类型设置为对象
:
private LinkedHashMap<String, Object> keyVal;
将放置一个整数
,即使您指定了int
私有LinkedHashMap keyVal;
private LinkedHashMap<String, Object> keyVal;
您可以使用Object
进行此操作。但是请记住,在尝试从该映射返回数据时(稍后某个时间),您可能会遇到将对象
转换为所需数据类型的困难,因为您可能不知道实际存在的数据类型
因此,避免这种实现是明智的。不,第二个参数是
对象
现在,我建议您重新思考您需要完成什么,因为这实际上违背了泛型的创建目的
如果您有一个绑定类型,并且希望保持一些灵活性,那么您可以使用类似于
的东西
在Java中,在同一数据结构中混合几种类型的对象是不可取的(如果这是好的或坏的,那就无关紧要了),但是类型安全在防止出现奇怪的错误方面有很大的作用
当您实际需要检索对象时,请尝试思考如何处理此问题。。。你会认为它们是弦吗?你打算用它们做什么?你说你想要一个地图
A由指定,原语为NumericType或boolean
,NumericType为integrationType或FloatingPointType
如果您的需要不是primitive,而是NumericType,则可以使用java.lang.Number
:
Map< String, Number >
如果在float
保持器上调用getInt()
,则由您执行一些检查并抛出异常。一切皆有可能,例如像C语言这样的转换类型
编辑
你也需要绳子,还有
您必须添加以下private short sValue编码>进入Any
类:
private String sValue;
并将下面的SHORT,
输入到类型
枚举中:
STRING,
但是,正如其他人所说,最好的方法是避免使用这些弱类型(Foure用法语兜售)。您可以使用
private LinkedHashMap<String, Object> keyVal;
如您所见,这允许您将允许的类型限制为一个公共属性(即,作为更一般类型的子类)。通过这种方式,您可以将映射的值用作更一般类的对象,因为它是您所知道(以及想要知道)的关于对象的一切
最好看一下:
注意什么时候应该使用通配符(?),并且应该使用泛型李>
在LinkedHashMap keyVal类型中使用对象不建议使用代码>李>
正如一些人所说,您可以将Object用于泛型变量类型,尤其是在使用泛型方法或不知道用户将使用什么数据类型时,比如下面这个简单的方法:
import java.util.Scanner;
public class GenericMethod {
public static void main(String[] args) {
System.out.println("Type something that's yours: ");
Scanner sc = new Scanner(System.in);
Object thing;
thing = sc.next();
isMine(thing);
}
// Generic Method
public static <T> void isMine(T x) {
System.out.println(x + " is mine.");
}
}
import java.util.Scanner;
公共类泛型方法{
公共静态void main(字符串[]args){
System.out.println(“键入属于您的内容:”);
扫描仪sc=新的扫描仪(System.in);
客观事物;
thing=sc.next();
伊斯明(事物);
}
//通用方法
公共静态空隙率(T x){
System.out.println(x+“是我的”);
}
}
这正是泛型试图避免的!如果你需要这个,你想要完成的事情很可能有问题。但是如果你想这样做,我假设你想使用java.util.LinkedHashMap
但不想指定第二个类型参数?好的,但是如果我有字符串,我应该如何处理它?你能考虑其他解决方案吗,我试图做的是将json对象绑定到键值列表,然后使用相应的类型处理它。。。
private LinkedHashMap<String, Object> keyVal;
private LinkedHashMap<String, ? extends Serializable> keyVal;
import java.util.Scanner;
public class GenericMethod {
public static void main(String[] args) {
System.out.println("Type something that's yours: ");
Scanner sc = new Scanner(System.in);
Object thing;
thing = sc.next();
isMine(thing);
}
// Generic Method
public static <T> void isMine(T x) {
System.out.println(x + " is mine.");
}
}