getter和setter、线程和Java

getter和setter、线程和Java,java,getter-setter,Java,Getter Setter,在学校里,他们教我们在Java中使用getter和setter。最近我一直在读这样的东西是不好的,不是OOP。好的,我可以编写一些代码,只使用构造函数设置数据并返回所需的数据 如何不在线程中使用getter?当你执行一个线程时,它的类型总是空的,在java中有很多全局变量。。那么,在没有getter方法的情况下,如何从线程获取数据呢 最近我一直在读这样的东西是不好的,不是OOP 恰恰相反,getter和setter是OOP的基石之一(需要这样的副作用) 但是,您仍然可以在启动线程之前传递构造函数

在学校里,他们教我们在Java中使用getter和setter。最近我一直在读这样的东西是不好的,不是OOP。好的,我可以编写一些代码,只使用构造函数设置数据并返回所需的数据


如何不在线程中使用getter?当你执行一个线程时,它的类型总是空的,在java中有很多全局变量。。那么,在没有getter方法的情况下,如何从线程获取数据呢

最近我一直在读这样的东西是不好的,不是OOP

恰恰相反,getter和setter是OOP的基石之一(需要这样的副作用)

但是,您仍然可以在启动线程之前传递构造函数参数,例如

new Thread(new MyRunnableObject(args)).start();

如果希望它返回一个没有getter的结果,最好实现一个
回调
,线程在完成时执行该回调

getter或setter本身是不错的OO设计

不好的是编码实践,它自动为每个成员包含一个getter和一个setter,不管是否需要该getter/setter(再加上公开不应该公开的成员),因为这基本上将类的实现暴露给外部世界,违反了信息隐藏/抽象。有时这是由IDE自动完成的,这意味着这种做法比预期的要广泛得多

最近我一直在读这样的东西是不好的,不是OOP 谁会说这样的废话

能手和二传手确实是一种最佳实践。它们为属性访问提供了一个层,因此当需要修改类中访问器的内部工作时,您只有一个更改点。如果需要封装不同的访问策略,可以在子类中重写它们

关于螺纹:


您应该使用线程安全集合之类的东西,我想有一些类用于线程之间的通信。使用线程安全队列,一个线程向其写入,另一个线程从其读取。我打赌那里有一些很好的图书馆。你真的不需要全局的。只需将相同的引用传递给需要跨线程通信的两个类。您也可以通过管道或TCP进行通信,但这更多的是用于进程间通信。

您从哪里读到getter和setter是糟糕的OOP?它们是大多数面向对象设计的主要内容。你在哪里读到过这篇文章?在三个人问同样的问题时笑了几秒钟。“当你执行一个线程时,它的[sic]类型总是无效的,并且在java中没有全局变量。”你能重新表述一下吗?这意味着什么?除了破坏封装外,可能是的副本。成员函数应该做适合类接口的事情,而不是类实现。(在某些情况下,getter和setter是合适的,但将它们自动放入是糟糕的OOP。)回调似乎是他们以前应该讨论过的事情。谢谢。什么样的IDE可以自动完成这项工作?我曾经使用过Netbeans和IDEA社区版,但它并没有这样做。@DasWood——老实说,我不知道——我听过前同事在他们的IDE上讨论过这个功能,但他们没有提到它是哪一个(我感觉是MS one)。或者可能是一些奇特的Eclipse插件。