【问题标题】:Java get variable type not workingJava获取变量类型不起作用
【发布时间】:2017-08-12 09:27:21
【问题描述】:

根据这个answergetClass().getName() 应该给我解决方案。我不确定为什么这不起作用。

错误:

/tmp/java_i8lW4s/HelloWorld.java:35: error: cannot find symbol
    System.out.print(z.class.getName());
                     ^
  symbol:   class z
  location: class HelloWorld
1 error

代码:

public class HelloWorld
{
  public static void main(String[] args)
  {
    int x, y;
    double z;

    x = 10;
    y = 5;

    z = 10 / 5;

    System.out.print(z.getClass().getName());
  }
}

【问题讨论】:

  • z 不是一个对象。它是一种原始数据类型。您不能调用原始数据类型的方法
  • 您不能在诸如double 之类的原始变量上调用getClass()(或任何其他方法)。此外,您的代码与您显示的错误不完全匹配,因此您编译的版本可能与此处显示的不同。
  • 您为什么要这样做?您确切地知道它是什么,即double。不可能是别的。
  • 其他答案解决了这个问题,但就像@Andreas 问的那样,这个用例是什么?还有其他更好的方法来检查不涉及将所有基元更改为类的实例的基元类型。此外,您应该开始使用像 eclipse 这样的 IDE 来进行开发。它会突出显示这个错误并告诉你问题是什么,这样你就可以在不重新编译的情况下弄清楚它。它也会给你一个更具描述性的错误。

标签: java


【解决方案1】:

如果你定义为

int a = 0;

那么它是一个原语

你想要的是能够调用 Integer 类是通过在 整数包装类中定义它来完成的(所有其他具有包装器的原语也是如此)

Integer a = 0;

例如javadocIntegerDouble

【讨论】:

  • @Daniel Reed,对于下面的问题,原语不会在内存中存储任何内容,而是存储值,因此您无法访问它是什么类型。 (需要 50 名代表......发表评论......)
【解决方案2】:

z 不是对象,它是原始类型。尝试在Double中更改它。

例如:shortintlongfloatdouble 只是数字数据基元类型。

它们相当于ShortIntegerLongFloatDouble

所以你应该问自己,为什么有相同事物的原始类型和对象表示。有什么区别。

基本上它们应该是相同的,例如,您可以透明地将Integer 添加到int

  Integer t = 2 ;
  int i = t + 1; // i now is 3

我也建议看看Autoboxing and Autounboxing in java

【讨论】:

  • 是否有检查原始类型的标准方法?我尝试了((Object)z).getClass().getName();,但是当我尝试double z; z = (int) 10/3; 时,它仍然给了我java.lang.Double
  • 问题是:“我可以问一个原始类型是哪种类型吗?”,如果这是你的问题,你不需要这样做,你在编译时就知道了。
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多