Tag: 构造函数

java从JFrame传递对象到JPanel

我正在使用NetBeans在Java中开发一个独立的应用程序,它通过串行端口获取和发送数据。 我正在使用一个很棒的串行通信API,称为java简单串行连接器http://code.google.com/p/java-simple-serial-connector/ 请下载我创建的以下NetBeans项目: http : //netload.in/dateiN9xmwRtn19.htm即使您没有netbeans,您仍然可以查看代码。 以上是我用来解释我希望完成的一个小例子项目。 该示例包含一个包含main方法的JFrame。 此JFrame包含2个面板:带导航按钮的面板和使用CardLayout显示面板1和面板2的面板。 在JFrame中,我有一个方法,使用jssc API的getPortNames()方法获取端口名称列表。 我的问题是,如何将这些端口名称字符串值从JFrame传递到我的Panel 1,而不使用以下内容,因为它不起作用:MyJFrame myjframe = new MyJFrame(); myjframe.getPortNames(); 气垫船满鳗鱼再次非常感谢你的解释,值得金。 我现在意识到我的问题是NetBeans而不是Java。 我对它不熟悉,但由于项目的规模和复杂性,我仍然更愿意使用它。 我在下面上传了2个截图,显示了我如何尝试将JFrame对象的“this”引用传递给NetBeans中的JPanel对象。 正如您在MyJFrame.java屏幕截图中看到的,NetBeans已将“this”引用标记为错误。 你能帮我解决这个问题吗? 此外,在您的解释的第一句中,您提到串行端口方法应该在单独的类中,而不是在JFrame中,因为它们是非GUI方法。 我完全同意你的意见,我更愿意这样做,因为它是正确的面向对象的方法。 但是这样做,我再次面临NetBeans中的同样问题。 我现在如何将对象引用从SerialPorts.java类传递给JFrame,JPanel等,以便我不会一直创建新的SerialPorts对象,记住我需要连接始终保持打开状态(例如没有使用SerialPorts sp = new SerialPorts();)。 非常感谢你的帮助。 在Panel 1的代码定制器中添加“this” MyJFrame.java – 编辑器将“this”引用为错误

匿名课程问题

我对这一行有点怀疑: 匿名类无法定义构造函数 那么,为什么我们还可以使用以下语法定义Anonymous类: new class-name ( [ argument-list ] ) { class-body }

在没有构造函数的情况下初始化类时会调用什么?

因此,当一个类有一个私有构造函数时,你无法初始化它,但是当它没有构造函数时你就可以。 那么在没有构造函数的情况下初始化类时会调用什么? 例如,这里所谓的(新的b())?? public class a { public static void main(String args[]) { b classB = new b(); } } public class b { public void aMethod() { } }

什么是非静态初始化块的替代方案?

我的项目有一些喜欢非静态初始化块的开发人员。 有什么替代方案 ,这种替代方案的缺点是什么? 我猜:在构造函数中初始化值? 我们为什么要使用非初始化块? 据我所知,“初始化块”用于在实例化类时设置值。 那么构造函数是不够的? public class BlockTest { String test = new String(); //Non-static initialization block { test = “testString”; } } 这个区块让我感到困惑,导致可读性降低。 感谢您的答复!

如何在构造函数结束之前引用/处理“this”?

我想到这个问题的具体用法如下,但它更加普遍。 我有一个自定义的JFrame类,它也可以作为其组件的ActionListener 。 所以我的构造函数看起来像下面这样: private JButton myButton; public MyCustomFrame() { super(); myButton.addActionListener(this); // … more stuff } 我的问题是,这实际上是如何在幕后工作的? 如果构造函数是“创建”由此引用的对象,那么在构造函数返回之前如何使用this ? 代码编译并且工作完全正常(据我所知),因此对象必须已经在某种意义上“存在”,但我担心这可能会导致无法预料的问题。 传递对addActionListener()的“部分构造”引用是否存在任何危险(或者通常只使用它执行任何逻辑)? 或者是否有一些让我安全的幕后魔术? 例如,那些没有默认值但必须由构造函数提供的东西呢? 如果我有private final String SOME_VALUE; 声明,我明白这应该默认为null ,但是在构造函数中提供一个值之前,该对象不应该完全形成。 那么参考文献尽管是最终的,但可能会有不断变化的价值吗?

项目Lombok @Data注释是否创建了任何类型的构造函数?

我有一个带有@Data注释的类,但是我不确定是否生成了带有参数的构造函数,或者只有生成的构造函数是来自vanilla Java的默认构造函数(无参数)。

在类Test中实例化一个类Test的成员递归吗?

这是递归吗? public class Test { Test test = new Test(); public static void main(String[] args) { new Test(); } } 使用实例初始化器的版本怎么样? public class Test { { Test test = new Test(); } public static void main(String[] args) { new Test(); } } 我问,因为我更新了我的旧答案 ,它显示了如何在没有递归的情况下制作StackOverflowError ,但现在我不能100%确定上面的代码是否是递归。

如何创建“抽象领域”?

我知道java中不存在抽象字段。 我也读过这个问题,但提出的解决方案并不能解决我的问题。 也许没有解决方案,但值得问:) 问题 我有一个抽象类,它根据其中一个字段的值在构造函数中执行操作。 问题是该字段的值将根据子类而改变 。 我该怎么做才能对子类重新定义的字段的值进行操作? 如果我只是“覆盖”子类中的字段,则对抽象类中字段的值进行操作。 我对任何可以确保在子类实例化期间完成操作的解决方案持开放态度 ( 即将操作放在构造函数中每个子类调用的方法中都不是有效的解决方案,因为有人可能会扩展抽象类并忘记调用方法)。 另外,我不想将字段的值赋予构造函数的参数。 有没有解决办法,或者我应该改变我的设计? 编辑: 我的子类实际上是我的主程序使用的一些工具,因此构造函数必须是公共的并且完全采用它们将被调用的参数: tools[0]=new Hand(this); tools[1]=new Pencil(this); tools[2]=new AddObject(this); (子类是Hand,Pencil和AddObject,它们都扩展了抽象类Tool) 这就是为什么我不想改变构造函数。 我即将使用的解决方案是将上面的代码稍微更改为: tools[0]=new Hand(this); tools[0].init(); tools[1]=new Pencil(this); tools[1].init(); tools[2]=new AddObject(this); tools[2].init(); 并使用抽象的getter访问该字段。

如果重载构造函数,如何调用super(…)和this(…)?

我以前从未需要这样做,但由于两者都必须是构造函数中的“第一行”,应该如何解决它? 对于这样的情况,最好的重构是什么? 这是一个示例: public class Agreement extends Postable { public Agreement(User user, Data dataCovered) { super(user); this(user,dataCovered,null); } public Agreement(User user,Data dataCovered, Price price) { super(user); if(price!=null) this.price = price; this.dataCovered = dataCovered; } … } 对super(user)的调用是绝对必须的。 在这种情况下如何处理“可选参数”? 我能想到的唯一方法就是重复,即根本不要称之为(…)。 只需在每个构造函数中执行赋值。

复制抽象类的构造函数

我有一个名为AClass的抽象类。 在同一个包中我有AnotherClass ,其中我有一个AClass对象的ArrayList 。 在AnotherClass的复制构造函数中,我需要在ArrayList复制AClass对象。 问题: 我不能在AClass创建一个复制构造函数,因为它是一个抽象类,我不知道将由AClassinheritance的类的名称。 实际上,在这个项目中,没有对象会从这个类inheritance,但是这个项目将被其他项目用作库,这些项目将提供一个AClass类。 我的设计中是否有错误或是否有解决此问题的方法? 编辑 :这里是一些代码: public class AnotherClass{ private ArrayList list; … /** Copy constructor */ public AnotherClass(AnotherClass another){ // copy all fields from “another” this.list = new ArrayList(); for(int i = 0; i < another.list.size(); i++){ // Option 1: this.list.add(new AClass(another.list.get(i))); // problem: cannot instantiate AClass as it […]