java.awt.geom.Rectangle2D的字段?
这里我不是Java人士,我只是在尝试以下代码: 它打印出: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.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;