【问题标题】:How to get Anonym Objects parameters?如何获取匿名对象参数?
【发布时间】:2019-03-30 14:35:20
【问题描述】:

我试图将我的匿名对象从一个类添加到一个哈希表。我按照老师的要求创建了我的 Hashtable,但是有一个问题。我必须得到我的对象之一的 x 和 y 值。但是系统无论如何都找不到 x。

public class HashDatastructure{

  public static void main(String[] args){

    java.util.Hashtable kreise = new java.util.Hashtable();

    for(int i = 0; i < 6; i++){
      kreise.put(new Integer(i), new Kreis(120, 120, 60));
    }
    System.out.println(kreise.get(3).toString() + " is 4. Object
                       and this Object's X Value: "
                     + kreise.get(3).x + " || Y Value: ");
  }
}

这是我的 Kreis 课程:

public class Kreis extends Object{
    public int x; //Mittelpunkt-x
    public int y; // Mittelpunkt-y
    public int radius;
    public final double PI = 3.14159; //Constant Variable for pi
    public static int kreisCounter = kreisZaehler();
    public static int counter = 0;


    public Kreis(int x, int y, int radius){
      this.x = x;
      this.y = y;
      this.radius = radius;
      kreisCounter();
    }

    private static int kreisZaehler(){
      counter++;
      return counter;
    }
    public void setRadius(int wert){
      radius = wert;
    }

    public double getFlaeche(){
      return radius * radius * PI;
    }

    public double getUmfang(){
      return 2 * radius * PI;
    }

}

【问题讨论】:

  • 欢迎来到 StackOverflow。有些事情,您可能想用英语编写代码,这对于我们这些不会说德语的人来说更容易理解(?)。其次,这很重要:包括你得到的错误。这里的实际问题太模糊了。最后一点,您尝试执行kreise.get(3).x,但Kreis 中的x 设置为私有。要么将其更改为 public,要么创建一个 getter 方法。
  • 感谢您的反馈@OptimusCrime。下次我会更加小心这些点。

标签: java hashtable anonymous-objects


【解决方案1】:

我不知道您所说的“匿名对象”是什么意思,但您使用的是 原始类型,这通常不是一个好主意。相反,告诉编译器 kreis 包含什么样的对象:

java.util.Hashtable<Kreise> kreise = new java.util.Hashtable<>();
// ----------------^^^^^^^^---------------------------------^^

然后,编译器将知道get 返回一个Kreis 对象,其中有x 等。 (旁注:最好将 x 设为私有并为其提供像 getX 这样的访问器。)

更多内容请关注Generics Java Tutorial

如果您出于某种原因必须使用原始类型,则可以在检索时强制转换为 Kreis

// NOT recommended
System.out.println(kreise.get(3).toString() + " is 4. Object and this Object's X Value: "
                 + (((Kreise)kreise.get(3)).getX() + " || Y Value: ");
// -----------------^^^^^^^^^-------------^-^^^^^^

(请注意,我假设您将 x 设为私有并为其提供访问器。)

【讨论】:

  • 我不知道,但不知何故,本书希望我采用不推荐的方式。但它是这样工作的。谢谢。
  • @HürkanDoğan - 这本书也使用了Hashtable,它已经很久已经过时了。我认为您使用的这本书可能非常旧(在软件方面)。使用新书或在线课程可能会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多