java.awt.geom.Rectangle2D的字段?

java.awt.geom.Rectangle2D的字段?,java,processing,Java,Processing,这里我不是Java人士,我只是在尝试以下代码: 它打印出: java.awt.geom.Rectangle2D$Float[x=1.0,y=1.0,w=30.0,h=30.0] 。。。哪种类型表示可以访问x和y字段?甚至说: 字段摘要 … 浮动x 此矩形的X坐标为2D 然而,如果我取消注释println(testr.x),编译失败,原因是: testr.x cannot be resolved or not a field. 我哪里出错了?为什么我不能访问文档中明确指出存在的字段 顺便说一句

这里我不是Java人士,我只是在尝试以下代码:

它打印出:

java.awt.geom.Rectangle2D$Float[x=1.0,y=1.0,w=30.0,h=30.0]
。。。哪种类型表示可以访问
x
y
字段?甚至说:

字段摘要

浮动x
此矩形的X坐标为2D

然而,如果我取消注释println(testr.x),编译失败,原因是:

testr.x cannot be resolved or not a field.
我哪里出错了?为什么我不能访问文档中明确指出存在的字段

顺便说一句,当处理
.pde
成功编译时,我在
/tmp
中找到了完整的
.java
源代码:

import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import java.awt.geom.Rectangle2D; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class sketch_140204c extends PApplet {


//import java.awt.Rectangle; // int only


Rectangle2D testr;

public void setup() {
  testr = new Rectangle2D.Float(1.0f, 1.0f, 30.0f, 30.0f);
  println(testr);
}

  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "sketch_140204c" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}

这些字段是在上声明的,但是
testr
只是一个
矩形2D
。更改其声明将允许您访问它们,因为它们是公共的:

Rectangle2D.Float testr;

使用getter和setter是一个很好的建议,但是这些类没有单独的setter。只有setter可以设置整个矩形(即)。

您不应该尝试直接访问这些属性,而是调用公共getter方法。这就是矩形API。你感兴趣的是。检查其super类的getX()、getY()等的方法,确保这些字段是可访问的,但是可以访问类本身和来自同一包的类。不适用于外部课程(非相关)。这就是缺少public/protected/private关键字的原因。什么文档?据我所知,这些字段没有修改器,所以它们是包保护的。我不知道什么对你有用,因为我没有看到你的代码。我可以假设你开始使用
Rectangle2D
的公共字段,而不是受
Rectangle2D.Float
保护的包。至于修饰符,请查看此网站,非常感谢,@Radiodef-刚刚尝试过,它很有效!因此,问题不在于字段的私有/公共设置。。再次感谢-干杯@SDAOU:在我看来,这不是一个好的解决方案,因为你正在从抽象向具体编码,你正在破坏封装。为什么不简单地使用公共getter方法呢?@hovercraftfullofels-基本上,我正在为学生处理一个简单的示例,其中正确的Java语法/最佳实践不是主要关注的问题。所以首先,我尝试了
awt.Rectangle
,但由于我的示例需要浮点数,
awt.Rectangle
仅为int,我想-为什么不尝试
awt.geom.Rectangle2D.Float
,它似乎就是为此而设计的。我错误地将我的变量声明为
Rectangle2D
(而不是
Rectangle2D.Float
),因此无论哪种方式,我都会得到错误,我仍然无法解释为什么我可以使用
Rectangle2D.Float
,但不能使用
Rectangle2D.Float
@HovercraftFullOfEels(续)-此解决方案允许我在两个位置使用
.x
语法。而且,我更愿意在Processing中编写,
rect(myrect.x+5.0,myrect.y,myrect.width,myrect.height)作为单个绘图命令,而不是
rect(myrect.getX()+5.0,myrect.getY(),myrect.getWidth(),myrect.getHeight())。。。希望这能解释-干杯@HoverCraftfullOfeel这些对象实际上没有任何封装,正如我所说的,除了一次性设置整个矩形(这更像是一种方便)之外,没有设置器。它们只是被引导去绘制/填充,我更愿意同意它们只应该被临时创建(而不是一个字段)。
Rectangle2D.Float testr;