Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中访问类的成员_Java_Json_Class_Member - Fatal编程技术网

如何在Java中访问类的成员

如何在Java中访问类的成员,java,json,class,member,Java,Json,Class,Member,如果我知道一个成员的属性,我可以得到其余的属性吗 我正在创建这样的成员: ArrayList<Events> eventList = new ArrayList<Events>(); for (int i = 0; i < elist.length(); i++){ JSONObject e = elist.getJSONObject(i); //store each item we want into a variable String id

如果我知道一个成员的属性,我可以得到其余的属性吗

我正在创建这样的成员:

ArrayList<Events> eventList = new ArrayList<Events>();

for (int i = 0; i < elist.length(); i++){

JSONObject e = elist.getJSONObject(i);

    //store each item we want into a variable
    String id = e.getString(TAG_id);
    String event = e.getString(TAG_event);
    String eventCity = e.getString(TAG_city);

    //add the event
    eventList.add(new Event(id, event.toUpperCase(), eventCity));
}
for( Event evt : allEvents ) {
   System.out.println( evt.getId() );
   System.out.println( evt.getEvent() );
   System.out.println( evt.getCity() );
}
那么,如果我知道班上有什么活动,我可以得到Id和城市吗

到目前为止,我唯一想做的是:

String show = eventList.get(1).toString();
但是如果我不知道索引呢?

这里有一种方法:

public String getEventById(List<Event> eventList, String id) {
    for (Event event : eventList) {
        if (event.getId().equals(id)) {
            return event.getEvent();
        }
    }
    return null;
}
公共字符串getEventById(列表eventList,字符串id){
用于(事件:事件列表){
if(event.getId().equals(id)){
return event.getEvent();
}
}
返回null;
}

因此,我认为您在理解这里使用的各种数据结构时遇到了一些困难。让我们看看我能否从简单开始。因此,给定一个事件实例,您可以让各个字段执行以下操作:

Event evt = ...
System.out.println( evt.getEvent() );
System.out.println( evt.Id() );
System.out.println( evt.getCity() );
要获取各种字段,您可以使用指向单个事件实例的变量。现在看起来您在ArrayList中存储了多个事件实例。因此,您可能希望对所有事件执行一些操作,在这种情况下,您希望循环数组中的每个实例,并执行如下操作:

ArrayList<Events> eventList = new ArrayList<Events>();

for (int i = 0; i < elist.length(); i++){

JSONObject e = elist.getJSONObject(i);

    //store each item we want into a variable
    String id = e.getString(TAG_id);
    String event = e.getString(TAG_event);
    String eventCity = e.getString(TAG_city);

    //add the event
    eventList.add(new Event(id, event.toUpperCase(), eventCity));
}
for( Event evt : allEvents ) {
   System.out.println( evt.getId() );
   System.out.println( evt.getEvent() );
   System.out.println( evt.getCity() );
}
这将打印allEvents ArrayList中的所有事件。您还可以编写一个基于给定事件ID查找事件的方法

public Event findEvent( String id, List<Event> allEvents ) {
   for( Event evt : allEvents ) {
       if( evt.getId().equals(id) ) {
          return evt;
       }
   }

   return null;
}

通常,类名是单数的。事件而不是事件。@GilbertLeBlanc Ok。。。您知道如何基于其中一个变量访问成员吗?您不应该将字符串更改为public。Java标准是使用getter和setter拥有私有实例变量。如果您需要更改这些字符串,您应该使用类似于
public void setId(String id)
的东西将id更改为新值,这样就可以了,我认为这很有帮助。我将把findEvent代码更改为
evt.getEventName().equals(event\u name)
,因为我只知道event\u名称。我编辑了我的问题以解决命名问题。这是放在我的事件类中的方法还是放在它外部的类中的方法?因为findEvent()必须处理事件实例的集合(即1个或多个),所以它将属于事件类外部,因为它只处理单个事件实例,而不处理多个实例。事件和事件集合之间的基数是不同的。这个方法是有效的,我理解它,除了我们为什么将类型更改为LIST。谢谢你的帮助@silversunhunter:在代码中使用接口(列表)比使用具体实现(ArrayList)更好。主要原因是它使您的代码更加灵活。您可以从ArrayList更改为LinkedList,而无需更改其余代码。