验证码:
Dictionary<String, Integer> dict = new Hashtable<>(); dict.put(record);
如果你已经定义了字典的数据类型,是否可以在字典中放入另一个数据类型?例如,我想输入一个数据类型为Data的记录。
Data
js81xvg61#
如果你已经定义了字典的数据类型,是否可以在字典中放入另一个数据类型?号你可以放入 * 子类型 *,但不能放入完全不同的类型。Java Generics的目的是使编译器能够阻止您使用不同的类型。如果你定义Map来保存String类型的键,这些键会导致Integer类型的值,那么:
Map
String
Integer
String类是final,所以不存在`String的子类。
final
Integer类是final,所以不存在Integer的子类。假设我们用更一般的类型CharSequence和Number定义了你的map。然后我们可以添加条目,其中键是CharSequence接口的任何实现,例如String和StringBuilder。我们可以添加值为Number的任何子类的条目,例如Integer和Double。
CharSequence
Number
StringBuilder
Double
Map < CharSequence, Number > map = Map.of ( "Alice" , Integer.valueOf ( 42 ) , // String , Integer new StringBuilder ( "Bob" ) , Double.valueOf ( "7.8" ) // StringBuilder , Double );
如果您想使用records替换String-> Integer配对,则不需要Map。只需使用任何Set或List实现来收集记录类型的对象。
Set
List
record CatsPerPerson ( String name , int countOfCats ) {} List< CatsPerPerson > list = List.of ( new CatsPerPerson ( "Alice" , 2 ) , new CatsPerPerson ( "Bob" , 0 ) , new CatsPerPerson ( "Paula Poundstone" , 12 ) );
1条答案
按热度按时间js81xvg61#
子类型,不是不同类型
如果你已经定义了字典的数据类型,是否可以在字典中放入另一个数据类型?
号
你可以放入 * 子类型 *,但不能放入完全不同的类型。Java Generics的目的是使编译器能够阻止您使用不同的类型。
如果你定义
Map
来保存String
类型的键,这些键会导致Integer
类型的值,那么:String
对象本身,或者是String
的子类。String
类是final
,所以不存在`String的子类。Integer
对象本身,或者是Integer
的子类。Integer
类是final
,所以不存在Integer
的子类。假设我们用更一般的类型
CharSequence
和Number
定义了你的map。然后我们可以添加条目,其中键是CharSequence
接口的任何实现,例如String
和StringBuilder
。我们可以添加值为Number
的任何子类的条目,例如Integer
和Double
。记录
如果您想使用records替换
String
->Integer
配对,则不需要Map
。只需使用任何Set
或List
实现来收集记录类型的对象。