如何在一个类中构建HashMap,然后在Java中的另一个类中使用它?

如何在一个类中构建HashMap,然后在Java中的另一个类中使用它?,java,hashmap,Java,Hashmap,基本上,我只想在一个类中创建一个HashMap对象,使用循环在该类中构建它,然后能够将其调用到另一个类中。我不确定我需要做什么来完成这一点。我尝试在类本身中声明它,然后在main()函数中构建它,但这不允许我在类之外访问它,因为它需要是静态的 以下是我思考过程的一些伪代码: public class Class1 { public Map<> map = new HashMap<>(); public static void main(String[]

基本上,我只想在一个类中创建一个HashMap对象,使用循环在该类中构建它,然后能够将其调用到另一个类中。我不确定我需要做什么来完成这一点。我尝试在类本身中声明它,然后在main()函数中构建它,但这不允许我在类之外访问它,因为它需要是静态的

以下是我思考过程的一些伪代码:

public class Class1 {
    public Map<> map = new HashMap<>();

    public static void main(String[] args) {
    //build hashmap here using map.put etc
    }

public class Class2 {
    public static void main(String[] args) {
    //get the map using Class1.map
    }
}
公共类1{
publicmap=newhashmap();
公共静态void main(字符串[]args){
//使用map.put等在此处构建hashmap
}
公共课2{
公共静态void main(字符串[]args){
//使用Class1.map获取地图
}
}
在方法调用中传递对象引用
HashMap
是一个对象。因此,在另一个类的对象的方法调用中传递对它的引用

制作你的地图

Map map = new HashMap() ; 
map.put( … ) ;
other.workOnMap( map ) ;
创建另一个对象。在这里,我们设想您编写的名为
other
的类

Other other = new Other() ;
把地图递给我

Map map = new HashMap() ; 
map.put( … ) ;
other.workOnMap( map ) ;
您可以在中看到这一点

实例 下面是一个完整的示例,您可以自己编写四个类,
MapDemo.java
ReportTool.java
LoggingTool.java
EmployeePagingTool.java

publicstaticvoidmain
方法中,我们创建了一个应用程序实例,开始运行。这解决了问题。在学习Java时,不要把重点放在这个方法上。我认为它更像是一个黑客,一个将我们从地球(主机、操作系统、文件、尚未分配的内存)带到天堂的拐杖(这是一个美妙的OOP天堂,除了漂浮在周围的干净物体和相互传递信息外,什么都没有)

真正的操作是在
doIt
方法中,我们构建了一个
DayOfWeek
enum对象的集合,该对象将导致一个
字符串,其中包含当天负责某项工作的员工的姓名(例如进行呼叫寻呼机)

enum
表示已经为我们实例化的一组命名对象。在本例中,我们已经为我们创建了七个
DayOfWeek
对象,一周中的每一天都有一个。这里没有什么太神秘的,enum对象只是一个对象,但它是一个提前为您调用
newdayofweek
的对象该类由

我们用一周中的每一天作为键填充地图,并且每个
DayOfWeek
key对象都指向某人的名字。我们为一周中的每一天指定了一个名字

最后,我们将此映射交给另一个对象进行分析,以生成发送给boss的报告。我们从类
ReportTool
实例化的另一个工具(此处未显示,因为其源代码与此演示无关)。与
LoggingTool
EmployeePagingTool
相同

package com.basilbourque.example;

import java.time.DayOfWeek;
import java.util.HashMap;
import java.util.Map;

public class MapDemo {

    public static void main ( String[] args ) {
        MapDemo app = new MapDemo();
        app.doIt();
    }

    private void doIt ( ) {
        int initialCapacity = DayOfWeek.values().length;
        Map < DayOfWeek, String > weekCoverage = new HashMap <>( initialCapacity );

        weekCoverage.put( DayOfWeek.MONDAY , "Stuart" );
        weekCoverage.put( DayOfWeek.TUESDAY , "Wendy" );
        weekCoverage.put( DayOfWeek.WEDNESDAY , "Lisa" );
        weekCoverage.put( DayOfWeek.THURSDAY , "Jesse" );
        weekCoverage.put( DayOfWeek.FRIDAY , "Marvin" );
        weekCoverage.put( DayOfWeek.SATURDAY , "Janet" );
        weekCoverage.put( DayOfWeek.SUNDAY , "Jarrod" );

        System.out.println( weekCoverage );

        ReportTool reportTool = new ReportTool();
        reportTool.makeHtmlSummaryOfWeekCoverageAndEmailToBoss( weekCoverage );

        LoggingTool loggingTool = new LoggingTool();
        loggingTool.logWeekCoverage( weekCoverage );

        EmployeePagingTool employeePagingTool = new EmployeePagingTool();
        employeePagingTool.sendTextMessagesForWeekCoverage( weekCoverage );

    }
}
…到这一行:

        Map < DayOfWeek, String > weekCoverage = new EnumMap( DayOfWeek.class );
MapweekCoverage=newenummap(DayOfWeek.class);

其他代码都不需要更改。

更新:我最终只是在Class1中的一个方法中构建并返回hashmap,然后在Class2中创建Class1的实例并调用该方法返回hashmap


这是一个相当简单的解决方案,不知道为什么很难找到答案。感谢所有试图帮助您将代码发布到这里的人,我认为巴兹尔的答案是正确的方法……为什么(在世界上)难道你不想创建另一个类的实例吗?好吧,如果你声明了所有的
static
,你可以这样做,比如
publicstaticmap=…
,因为这样Class2就可以引用
Class1.Map.get(…)
但是你不是在做面向对象的编程,你只是在滥用一种O-O语言;你还不如学习
C
编程。如果我声明所有内容都是静态的,那不是会禁止我在映射中插入元素吗?我不想创建
其他
的实例。我想能够使用
映射
Other
@User中,我无法理解你评论的意图。如果你发明了一些简单的小例子,这种问题就更清楚了。也许你可以使用我在这里发布的
weekCoverage
例子来重述。如果不适合你的问题,请编辑你的问题以展示你自己发明的例子。但请省去我们的麻烦我只想在一个类中构建一个可供多个类使用的字典,这样我就不必多次构建字典。比如说,我有weekCoverage映射。然后ReportTool类需要使用weekCoverage中的数据来完成它自己的事情。在我的代码中,我想使用dat在一个预构建的映射中,一个用于实现从该映射中获取数据的简单java swing UI的map@User这正是我要展示的内容。
ReportTool
对象可以自由地对地图中的数据执行任何操作。也许它只发送周末的boss信息。在我们的
MapDemo
代码中,我们不知道
ReportTool
与我们的地图有关,我们也不关心。ReportTool
类甚至可以自由更改地图的内容。在实际工作中,如果我们想在
MapDemo
中进一步使用我们的地图,我们实际上会传递一份地图副本,以防
ReportTool
更改我们地图的内容。@User I在我的示例中添加了更多的代码,以强调我们正在与不同类别的多个其他对象共享地图:一个
PrintStream
object()、一个
ReportTool
对象、一个
LoggingTool
对象和一个
EmployeePagingTool
对象。