将不同的数据类型放入字典中定义的数据类型

0 java dictionary

代码:

Dictionary<String, Integer> dict = new Hashtable<>();
dict.put(record);
Run Code Online (Sandbox Code Playgroud)

如果您已经为字典定义了数据类型,是否可以将另一种数据类型放入字典中?例如,我想放置数据类型为 的记录Data

Bas*_*que 5

子类型,而不是不同类型

如果您已经为字典定义了数据类型,是否可以将另一种数据类型放入字典中?

不。

您可以放入子类型,但不能放入完全不同的类型。Java 泛型的目的是使编译器能够阻止您使用不同的类型。

如果您定义了Map持有String导致类型值的类型的键Integer,那么:

  • 您输入到该映射中的每个键都必须是String对象本身,或者是 的子类String
    该类Stringfinal,因此不存在“String”的子类。
  • 您输入到该映射中的每个值都必须是Integer对象本身,或者是 的子类Integer
    Integerfinal,所以不存在 的子类之类的东西Integer

假设我们使用更通用的类型CharSequence和定义了您的地图Number。然后我们可以添加条目,其中键是CharSequence接口的任何实现,例如StringStringBuilder。我们可以添加值为 和 的任何子类NumberInteger条目Double

Map < CharSequence, Number > map =
        Map.of (
                "Alice" , Integer.valueOf ( 42 ) ,                       // String , Integer
                new StringBuilder ( "Bob" ) , Double.valueOf ( "7.8" )   // StringBuilder , Double
        );
Run Code Online (Sandbox Code Playgroud)

记录

如果您想使用记录String替换您的->配对,则无需. 只需使用任何您想要收集记录类型对象的实现即可。IntegerMapSetList

record CatsPerPerson ( String name , int countOfCats ) {}
List< CatsPerPerson > list = 
    List.of (
        new CatsPerPerson ( "Alice" , 2 ) ,
        new CatsPerPerson ( "Bob" , 0 ) ,
        new CatsPerPerson ( "Paula Poundstone" , 12 ) 
    );
Run Code Online (Sandbox Code Playgroud)