【问题标题】:Get info of an object in a ArrayList获取 ArrayList 中对象的信息
【发布时间】:2021-06-22 08:10:47
【问题描述】:

我创建了一个ArrayList,我在其中放置了一些对象。当我创建一个对象时,我可以通过以下方式检索一些信息:

objectX.getActivityName();

我的问题是当我将所有对象放入 ArrayList 时,我无法访问我的 getActivityName 示例:

for (Object temp:tabRegristre) {
        System.out.println("TEMPS : " + temp); // I want to show the temp object Activity Name not all the info of the object.

    }

是否有任何解决方案可以仅从 for each 循环中显示我的对象的一些信息?而不是打印对象本身?

谢谢!!

【问题讨论】:

  • 好吧,如果你想把不同类型的对象放到一个列表中,你可以使用泛型和接口。
  • 由于您是对象的toString() 方法的实现者,因此您可以完全控制返回的信息量。
  • 为什么temp 输入Object?我希望这不是因为列表中有混合对象,因为那是一个糟糕的设计。那么为什么temp 不是tabRegristre 包含的对象类型呢?
  • 不!所有对象都是同一类型。 temp 仅用于打印 arraylist 中的每个对象。我可以用循环打印每个对象。这里没问题。但我想从arraylist 中的每个对象打印一个信息。这是我的问题:(
  • 使用for (MySpecificClass temp:tabRegristre) {... 而不是Object

标签: java object arraylist


【解决方案1】:

泛型

您需要了解Java Generics 和使用尖括号<>。见tutorial by Oracle

对于简短的类定义,请使用 Java 16 中的新 records 功能。(或使用常规类。)

public record Activity ( String name , LocalDate when ) {}

制作几个这样的对象。

Activity brunch = new Activity( "Brunch" , LocalDate.of( 2021 , Month.MARCH , 15 ) ) ;
Activity meeting = new Activity( "Meeting" , LocalDate.of( 2021 , Month.APRIL , 23 ) ) ;

定义您的收藏。请注意我们如何使用尖括号告诉编译器我们希望将此列表限制为仅包含 Activity 类型的对象。

List< Activity > activities = new ArrayList< Activity >() ;

编译器可以推断出赋值=右侧的类Activity。所以无需重复。

List< Activity > activities = new ArrayList<>() ;

将您的对象添加到集合中。

activities.add( brunch ) ;
activities.add( meeting ) ;

检索每个对象。打印日期。访问器方法的名称与其属性相同。所以when() 是我们的LocalDate 属性名为when 的访问器方法。

编译器知道只有Activity 对象进入集合,因此检索到的项目必须是Activity 对象。无需强制转换 (explicit type conversion)。

for( Activity activity : activities ) 
{
    System.out.println( activity.when() ) ;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多