Questions tagged «java»

Java是最初由Sun Microsystems开发的高级,独立于平台的,面向对象的编程语言。Java目前归甲骨文所有,甲骨文于2010年收购了Sun。

5
修改后的策略设计模式
我最近开始研究设计模式,除了一点点不同之外,我正在编写的一件事将完全适合于战略模式。 本质上,我的某些(但不是全部)算法需要一个或两个额外的参数传递给它们。 所以我要么需要 当我调用他们的calculate方法时,给他们传递一个额外的参数 要么 将它们存储为ConcreteAlgorithm类中的变量,并能够在调用算法之前对其进行更新。 有满足这种需求的设计模式吗?在坚持策略模式的同时如何实现? 我考虑过将客户端对象传递给所有算法,并将变量存储在其中,然后仅在特定算法需要时才使用该对象。但是,我认为这既笨拙,又打败了战略模式的意义。 为了清楚起见,我正在用Java实现,因此没有太多的可选参数(可以很好地解决此问题)。

9
有关代码文档生产率收益/损失的研究
经过大量搜索,我未能回答与软件开发领域中已知的假设有关的基本问题: 什么是已知的: 对足够的代码文档(无论是Doxygen标记,Javadoc还是仅仅是大量注释)实施严格的政策,都会增加开发代码所需的时间。 但: 拥有详尽的文档(甚至API),可以在新手和经验丰富的开发人员添加功能或修复bug时带来生产率的提高(有人认为)。 问题: 保证此类文档所需的额外开发时间是否能被下游生产率的提高(从严格的经济意义上来说)所抵消? 我正在寻找案例研究或答案,可以带给他们客观的证据来支持得出的结论。 提前致谢!


4
使用哪个基于Java的Web ui框架?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 便门 请点击 GWT 瓦丹 据我了解,这些框架都允许使用Java创建GUI组件(具有其所有优点),而无需执行大量的html / javascript。 除了考虑技术因素之外,我还想知道是否有任何一种正在迅速普及。是一个特定的框架正在成为包的领导者,这也会影响决策。

3
是否有充分的理由使用Java的Collection接口?
我听到过这样的论点,即您应该使用可用的最通用的接口,以免与该接口的特定实现联系在一起。此逻辑是否适用于java.util.Collection之类的接口? 我宁愿看到如下内容: List<Foo> getFoos() 要么 Set<Foo> getFoos() 代替 Collection<Foo> getFoos() 在最后一种情况下,我不知道我要处理哪种数据集,而在前两种情况下,我可以对顺序和唯一性做出一些假设。除了作为集合和列表的逻辑父代之外,java.util.Collection是否有用? 如果在进行代码审查时遇到使用Collection的代码,您将如何确定其用法是否合理,以及对使用更特定的界面替换它有何建议?

5
您对GWT有什么看法?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 由于我是在这段时间学习Java的,所以我刚刚完成了教程,所以我认为我准备开始为一个项目做贡献了(因为我从经验中知道这是真正学习的最佳方法)。 我看过GWT,看起来很有趣,所以我想尝试一下。但是我在想,由于GWT在JavaScript中部署了Java应用程序,为什么当我可以学习实际的东西(这就是JavaScript)时,为什么应该学习GWT。我的问题:值得吗?如果他们想构建JS应用程序而不是使用Java和GWT,那么有人会更好地学习JavaScript吗?我意识到用GWT构建某些东西可能会更容易,但最终值得吗? 谢谢。
11 java  javascript  gwt 

10
Java或C ++用于大学CS课程?
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我正努力进入学校攻读CS学位。我所看的学校实际上为基础软件开发课程提供了基于Java和C ++的基础(面向对象的编程,设计模式之类的东西)。哪一条路是学生的选择,但只有时间去追踪。 知道了现在所知道的,如果可以选择的话,您是否会奠定Java或C ++的CS课程基础? 我当前的辩论目前看起来像这样: 一位好朋友(拥有AI博士学位)将Java视为更好的选择,而不管我做什么,只要稍后才提供更多的工作机会,尽管他可能因为所有工作都在Java中而有所偏见(他喜欢它)。我住在美国马萨诸塞州波士顿地区,并且看到相等数量的Java和C工作。 另一方面,虽然我还没有完全确定要完成的学位课程,但我倾向于为Mac开发,尽管能力有限,但我现在正在做。为此,我已经对C ++有了一定的了解,但是我还没有使用Java,并且在我的日常工作中查看我的项目时,我很快就认为不需要很快使用它了。至少两年。 我可能应该注意,我是一个成年人,在20年后重返学校(目前我没有任何学位),因此我正在寻求最大程度地利用机会和时间。我有点倾向于C ++,但是我仍然很矛盾,有些外部的客观建议会有所帮助。 或者,我可能只是在考虑这个问题。 更新:事实证明,语言选择不是我最初认为的那么明确。尽管有几门核心课程侧重于Java,但其他一些核心课程则主要针对C和Java,但也有一些其他核心课程相当不错。实际上,在花时间学习Java和Javascript之后,我的剩余学期将是在Objective-C中。上学期是C,Javascript和PHP,另外还有一些其他作业根据需要分配。由于事情在总体上几乎是分散的,而且我仍然可以得到答案,所以我现在正在努力设计课程,以便满足学位的所有要求,但要吸收尽可能多的语言。 。到目前为止,我的成绩并未受到影响。
11 java  c++  education 

3
在Java 8中,使用方法引用表达式或返回功能接口实现的方法在样式上是否更好?
Java 8添加了功能接口的概念,以及许多旨在采用功能接口的新方法。这些接口的实例可以使用方法引用表达式(例如SomeClass::someMethod)和lambda表达式(例如(x, y) -> x + y)来简洁地创建。 我和一位同事对什么时候最好使用一种或另一种形式(在这种情况下,“最佳”实际上可以归结为“最易读”和“最符合标准做法”)有不同的看法,因为他们基本上是相反的当量)。具体而言,这涉及以下所有情况: 所涉及的函数不在单个范围内使用 给实例起个名字有助于提高可读性(与之相反,例如,逻辑足够简单以一目了然地看到正在发生的事情) 没有其他编程原因可以解释为什么一种形式优于另一种形式。 我目前对此事的看法是,添加私有方法并通过方法引用进行引用是更好的方法。感觉这就是设计功能使用方式的方式,并且似乎更容易通过方法名称和签名传达正在发生的事情(例如,“ boolean isResultInFuture(Result result)”显然是在说要返回布尔值)。如果将来对类的增强希望使用相同的检查,但不需要功能接口包装器,则这也可使private方法可重用。 我的同事希望使用一种方法来返回接口的实例(例如“ Predicate resultInFuture()”)。对我而言,这感觉不完全是该功能的预期用途,感觉有点笨拙,而且似乎很难通过命名来真正传达意图。 为了使这个示例具体,下面是使用不同样式编写的相同代码: public class ResultProcessor { public void doSomethingImportant(List<Result> results) { results.filter(this::isResultInFuture).forEach({ result -> // Do something important with each future result line }); } private boolean isResultInFuture(Result result) { someOtherService.getResultDateFromDatabase(result).after(new Date()); } …

5
Java包级别作用域有用吗?
我了解包范围的概念,有时甚至认为我想要它。但是,每次我认真地尝试使用它时,我发现它都不符合我认为可以满足的需求。 我的主要问题始终似乎是,我希望限制范围的东西从来不在同一包中。它们可能在概念上全部链接在一起,但是应用程序中数据的逻辑划分将它们作为较大包的单独子包。 例如,我可能有一个Mission模型,并且我只希望其他Mission工具(例如我的missionServices)使用某些方法。但是,我最终将Missions.models和Missions.services作为我的包,所以MissionModel和MissionService不在同一包范围内。似乎从来没有出现过这样的情况:程序包适当地包含了我希望具有提升的权限的内容,却又不包含我不希望拥有这些权限的许多内容;我几乎没有感觉到包范围界定方法的优势证明修改我的项目体系结构以将所有内容都放在同一包中是合理的。通常,无论是Aspect还是某种形式的控制反转,都是解决我简要考虑过的程序包作用域的任何问题的更好方法。 我很好奇,这在所有Java开发人员中通常被认为是正确的,或者只是我所做的工作的fl幸。封装范围在现实世界中使用率很高吗?在很多情况下,它被认为是很好的使用形式,还是在大多数情况下,它被视为遗留行为而很少被开发利用? 我没有问任何关于为什么包私有作用域是默认值的问题,我在问什么时候应该使用它而不考虑默认值。关于为什么默认为默认值的大多数讨论并没有真正进入包范围实际有用的时间,而只是在争论为什么不应该将其他两个常用范围设为默认值,从而使包在消除过程中获胜。另外,我的问题是关于当前的发展状况。具体来说,我们是否已经开发到其他工具和范例使得程序包作用域不那么有用的地步,而当它成为默认值的决定才有意义时。
11 java  scope 

2
如果您知道参数是可能需要或可能不需要的东西,是否有任何理由不使用Optional作为方法参数?
使用Java 8,我看到了越来越多有关Option / Optional用法的文章。我了解他们试图代表的意思,并且看到许多将它们用作回报的示例。但是我看不到它们在没有默认/可选参数语法的语言中被用作方法/函数参数。 Optional如果您知道该参数是可能需要或不需要的东西,是否有任何理由不用作方法参数?这是我想到的一个示例: Optional<Customer> lookupCustomer(String firstName, Optional<String> middleName, String lastName)

4
Java的主要重点是什么?为什么要花这么长时间才能获得新功能?
我一直在探索JDK8中的新功能,例如lambda表达式,扩展方法和新的流API。 显然,这些功能都不是编程世界中的新增功能,这使人们感到奇怪的是,为什么到目前为止在Java中都无法获得所有这些功能。 Lisp(1958),SML(1973),Haskell(1990),Python(1991),JavaScript(1994),Ruby(1995),Scala(2003),C#(2007)和Lisp和55年后有lambda表达式Java(2013)中几乎所有其他人。 我在SIC(1996年)中读到有关流的信息。 我一直在想为什么现在呢?有证据表明,与其他语言竞争不是动机。 看来,此Java版本中的所有很酷的新功能只是实现并行性的副产品。我们之所以拥有lambda,是因为它们使编写并行算法变得更加简单,而我们拥有扩展方法,是因为我们需要它们来支持lambda表达式所需的更改等。 因此,我的问题是:我们能否安全地确认即将发布的Java版本中的主题实际上是并行性?还是我们可以证明迄今为止使用Java编写本书中最古老的技巧的其他原因?

3
在代码中使用抑制警告是一种好习惯吗?
我用@SuppressWarnings("unchecked")与@SuppressWarnings("null")大多上面的方法,让没有任何警告的代码编译,但我有我的怀疑。找到了这个Stackoverflow 问题。乔恩·斯基特(Jon Skeet)为此回答了一个有趣的答案。 据他介绍, 有时Java泛型只是不允许您做您想做的事情,您需要有效地告诉编译器在执行时所做的事情实际上是合法的。 但是,如果有机会引发异常该怎么办?那抑制警告不是一个坏主意吗?我是否应该知道可能出现问题的地方? 另外,如果其他人稍后修改了我的代码并添加了一些可疑的功能却又没有删除SuppressWarnings,该怎么办?如何避免和/或有其他替代方法? 我应该使用@SuppressWarnings("unchecked")和@SuppressWarnings("null")吗? 更新#1 对于未检查的类型强制转换,根据此答案(由@gnat在下面的注释中指出),有必要抑制这些警告。 许多必不可少的Java库从未进行过更新,以消除对不安全类型转换的需求。抑制这些警告是必要的,以便其他更重要的警告将被注意到并得到纠正。 在禁止其他警告的情况下,仍在灰色区域中。 更新#2 根据Oracle文档(以下一些答案也提到): 作为样式问题,程序员应始终在最有效嵌套的最深层元素上使用此注释。如果要在特定方法中禁止显示警告,则应注释该方法而不是其类。

2
使用字符串或int引用系统的Java部分之外的枚举更好吗?
我们在工作中讨论了Java中枚举的使用。 一位同事争辩说,在服务器端使用枚举时,每当需要时,我们都应该使用字符串来引用它(例如,当从JS向服务器发送数据或存储在数据库中时),认为这更加清楚了。对于开发人员来说也很困难,如果出现拼写错误,它将很快失败。 在这些情况下,我总是使用整数来标识枚举,因为它是不可变的标识符,并且不会出现大小写和拼写错误(即使开发人员错误地使用了值2而不是1,也不会很快失败)。 对这些参数非常分析,我会说使用字符串会更好,但是我对此有一种奇怪的感觉(好像这不是一个好方法)。 关于此讨论,是否有任何最佳实践可以指导我? 编辑:只要有可能,我们就使用枚举本身,因此我们所有的Java代码都使用枚举。“引用枚举”的意思是:在将数据从JavaScript交换到服务器或将数据存储在数据库中时,引用枚举中的值

4
如何将依赖注入与Factory模式结合使用
考虑一个负责解析任何给定类型文件的模块。我已经在这里进行了解释,我正在考虑使用策略模式来解决此问题。在继续此问题之前,请参阅链接的帖子。 考虑需要product.xml文件内容的类B。此类将需要实例化Parser接口的适当具体实现程序以解析XML文件。我可以将适当的具体实现者的实例委派给Factory,以使B类“拥有” Factory。但是,类B随后将“依赖”于工厂以实例化具体的实现者。这意味着将需要将类B中的构造函数或setter方法传递给Factory。 因此,需要解析文件的Factory和B类将紧密地结合在一起。我了解到目前为止,我所解释的内容可能完全错误。我想知道是否可以在要注入的依赖项是Factory的情况下使用依赖项注入,以及实现此目标的正确方法是什么,以便在单元测试中利用诸如模拟Factory的优势。

3
将一组相关的属性包装到其自己的struct / class中是一种好习惯吗?
用Swift编写User对象,尽管我的问题与任何强类型语言有关。用户可以拥有一堆链接(FacebookProfile,InstagramProfile等)。有关此问题。 将链接包装在其自己的对象中是一种好习惯吗? struct用户{ var firstName:字符串 var lastName:字符串 var email:string var链接:链接 } 结构链接{ var facebook:字符串 var instagram:字串 var twitter:字符串 } 还是应该松散?从技术上讲,我知道这两种方法都很好,但是总体上想知道是否有推荐的方法,尤其是为了提高可读性。 struct User { var firstName: string var lastName: string var email: string var facebookLink: string var twitterLink: string var instagramLink: string } 在这种情况下,链接应该是集合/列表吗?我认为它不应该是一个列表,因为有固定数量的链接选项可用,并且数量不会增加。我的想法对吗? 将我的网络方法放置在User对象(例如getUsers,getUser,updateUser)内是否是一种好习惯? 我知道这些可能是主观的,但是我试图了解在类似情况下的最佳实践是什么。将不胜感激任何指针。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.