首页 > 解决方案 > 需要有关 java 泛型问题的帮助

问题描述

我的输出目前是:

复仇者联盟@15db9742 复仇者联盟@6d06d69c

我还需要弄清楚如何使用通用打印方法显示名称。我一直在尝试类似的事情:但是经过几天GenericMethod_violette.<Avengers>print(avenger.getName())的处理,我似乎陷入了困境。GenericMethod_violette.<Avengers>print(avenger.trueIdentity())

我的输出需要是:

复仇者联盟@15db9742 复仇者联盟@6d06d69c
托尼·斯塔克、布鲁斯·班纳

我的GenericMethod_violette.java

import java.io.ObjectInputStream.GetField;

public class GenericMethod_violette {
  public static void main(String[] args ) {
    Avengers[] avenger = { new Avengers("Tony Stark"), new Avengers("Bruce Banner")};
    
    GenericMethod_violette.<Integer>print(integers);
    GenericMethod_violette.<String>print(strings);
    GenericMethod_violette.<Avengers>print(avenger);

    
  }

  public static <E> void print(E[] list) {
    for (int i = 0; i < list.length; i++)
      System.out.print(list[i] + " ");
    System.out.println();
  }
    
}

我的Avengers.java

public class Avengers
{
   private String trueIdentity;

   public Avengers(String name)
   {
      trueIdentity = name;
    }    

   public String getName()
   {
       return trueIdentity;
   }

   public String sayTrueIdentity()
   {
       return "Hello, I'm " + trueIdentity + "!";
   }
}

标签: javagenerics

解决方案


你可以在复仇者联盟中使用 write toString

      public class Avengers
        {
           private String trueIdentity;
        
           public Avengers(String name)
           {
              trueIdentity = name;
            }    
        
           public String getName()
           {
               return trueIdentity;
           }
        
           public String sayTrueIdentity()
           {
               return "Hello, I'm " + trueIdentity + "!";
           }
           // write any format you want to print
           @override
           public String toString()
           {
               return this.getName() + this.sayTrueIdentity();
           }
        }

然后将您的 GenericMethod_violette.print 方法更改为使用 toString()

  public static <E> void print(E[] list) {
    for (int i = 0; i < list.length; i++)
      System.out.print(list[i] + " ");
    System.out.println();
  }

复仇者联盟打印格式的原因 - Avengers@15db9742

In java all objects have a toString() method, which is invoked when you try and print the object.

    System.out.println(myObject);  // invokes myObject.toString()

This method is defined in the Object class (the superclass of all Java objects). The Object.toString() method returns a fairly ugly looking string, composed of the name of the class, an @ symbol and the hashcode of the object in hexadecimal. The code for this looks like:

    // Code of Object.toString()
    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }  

So you need @overrride toString method.

推荐阅读