Questions tagged «java»

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

2
在尝试Scala之前需要了解Java吗
我对学习Scala感兴趣。我已经阅读了很多有关它的内容,但是很多人都看重它,因为它有一个对并发性更好的actor模型,它以更好的方式处理xml,解决了头等函数的问题。 我的问题是,您是否需要了解Java才能理解/理解Scala中的工作方式?最好先尝试一下Java然后尝试Scala,还是可以在没有Java背景的情况下启动Scala?
15 java  scala 

2
结构分型的(缺点)
我刚刚看过Daniel Spiewak的演讲,他谈到了结构化类型与Scala的ans Java 标称类型相比的优势。这种差异的一个示例是以下Java代码 public interface Foo { public int length(); } public interface Bar { public int length(); } Foo f = ...; Bar b = f; 当然不会编译哪个,因为Foo和之间的类型兼容性Bar由名称决定。 另一方面,结构类型系统可以声明两种类型相等或兼容,因此,除其他事项外,还可以进行检查的鸭子类型。 现在,我认为我确实了解结构类型系统的大多数优点,但是我想知道它是否不会从以下示例中使类型安全失效 class Foo { class Bar { /* ... */ } def takeBar(b: Bar) = { /* ... */ } …

1
Oracle对Java的承诺是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我们正在Java上进行大量投资,但是根据最近的经验并阅读Joonas在该问题上的回答: 如果您在Java 6中使用了这些标志,则可能会由于从6u19到6u20的微小升级(大约)而不仅崩溃,而且循环执行不正确,即计算错误。 ...以及有关 Java 7显着问题的相关博客文章,使我们担心Java的质量不断提高。 Oracle是否正在解决这些问题?Oracle提供了哪些保证来确保Java在将来得到良好的支持?
15 java  oracle 

5
什么时候在条件表达式中使用按位运算符合适?
首先,有一些背景知识:我是一名IT培训师,我想在我的10年级课程中介绍Java的布尔运算符。我的导师查看了我准备的工作表,并评论说我可以让他们只使用一个&或|。表示操作员,因为他们“做同样的事情”。 我知道&和&&之间的区别。 &是按位运算符,旨在在整数之间使用,以执行“位旋转”。 &&是旨在在布尔值之间使用的条件运算符。 为了证明这些运算符并不总是“做相同的事情”,我着手寻找一个示例,在该示例中,使用布尔值之间的按位运算会导致错误。我找到了这个例子 boolean bitwise; boolean conditional; int i=10, j=12; bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3 System.out.println(bitwise+ " "+ i); i=10; conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10 System.out.println(conditional+ " "+ i); …

2
热插拔和替代方案?
从我大学时代的初期开始,我就一直在使用Java,而我们遇到的最大问题是绝对没有其他解释型语言高效。所有人都确信Java是最好的编译语言之一。 但是,Sun和Oracle都没有为解决这个问题投入足够的精力。问题之一当然是类重载。 社区解决此问题的最新尝试是DaVinci Hotswap项目,JRebel和PlayFramework。但是,在撰写本文时,它们仍不成熟(imo)和本机。其中一些尚未为企业准备就绪,其中一些与所有IDE不兼容,其中一些是不成熟的大学项目。路线图甚至开发人员都可以使用Java,但Java社区仍然没有即时类重新加载的解决方案。 Oracle为解决这个问题付出如此艰巨的努力吗?为什么还没有在本地实现类重载?
15 java 

8
您如何鼓励您的组织从Java迁移到Scala?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 是否有人组织开始从Java迁移到Scala?如果是,您该怎么做?我怎样做才能鼓励我的同事也这样做?
15 java  scala  migration 

1
与每个循环的标准相比,Collection.stream()。filter()。forEach()效率低下吗?
IntelliJ IDEA刚刚向我建议用Java 8“ forEach”调用替换以下for-each循环: for (Object o : objects) { if (o instanceof SomeObject) { doSomething(); } } 推荐的电话如下所示: objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething()); 除非我误解了Stream的基础功能如何工作,否则在我看来,使用stream是一个O(2n)操作,而不是标准for-each循环的O(n)操作。

5
单元测试无效方法
为了修复应用程序中的错误,我postLogin通过将调用添加到名为的现有方法上来修改了一种名为的方法getShoppingCart。 码 protected void postLogin() { getShoppingCart(); } 但是,我不确定编写单元测试的最佳方法postLogin是什么。 方法1 使用Mockito中的verify可以简单地验证该方法是否已被调用。 verify(mock).getShoppingCart(); 方法2 通过获取用户购物车的值来测试方法调用的副作用。 AssertNotNull(user.getShoppingCart()); 一种方法比另一种更好吗?

3
干净的体系结构-用例类太多
我将进入Clean Architecture,将Android的级别从MVC提升到MVP,使用Dagger 2引入DI,使用RxJava 2引入反应性,当然还使用Java 8。 在MVP干净架构中,实体(在数据存储区中)与应访问它们的演示者之间存在一层。该层是“用例”。用例最好是一个接口,它对一个实体执行一个操作。 我还知道,Clear Architecture 是“尖叫中的 ”,就其项目而言,由于它们中的类很多,因此其可读性很高。 现在,在我的项目中,我有大约6个不同的实体,当然,每个实体存储库都有至少4种方法(通常是get,add,delete,update)来访问它们。. 因此,6 * 4 = 24。 如果我到目前为止对Clean Architecture的了解,我将有24个UseCase。 如果与MVC中的6个控制器相比,这是很多类。 我真的需要制作24个用例吗? 我真的很感谢有人成功使用它所做的澄清。 谢谢,杰克
15 java  android  use-case  mvp 

3
找不到资源时,我应该返回204或404响应吗?
我正在为比赛和日程表开发一个简单的RESTful服务。通过包含JSON正文的POST请求创建锦标赛时,会将锦标赛插入,BiMap在DAO实现中声明如下: private BiMap<String, Tournament> tournaments = Maps.synchronizedBiMap(HashBiMap.create()); 创建锦标赛时,将返回其关联的字符串ID,以便用户将来可以参考该锦标赛。他/她可以从执行以下请求的新锦标赛中获取信息: GET http://localhost:8080/eventscheduler/c15268ce-474a-49bd-a623-b0b865386f39 但是,如果找不到具有此类ID的锦标赛怎么办?到目前为止,我将返回204响应。好吧,泽西岛null从其中一种方法返回时正在为我做这件事。这是与上述路线相对应的方法: @Path("/{id}") @GET @Produces(MediaType.APPLICATION_JSON) public Tournament getTournament(@PathParam("id") String id) { Optional<Tournament> optTournament = tournamentDao.getTournament(id); if (optTournament.isPresent()) return optTournament.get(); return null; } 我的问题是:可以返回204: No Content响应,还是应该返回404响应,因为找不到资源? 如果我应该将其更改为404,则会出现一个明显的问题:我应该更改方法签名吗?由于现在Tournament可能不会返回(类型为)锦标赛,因此方法应该看起来有所不同。我应该使用该Response类型作为返回类型吗?
15 java  rest  web-services  http 

3
RxJava类Flowable是否可以合法地使用460个方法?
我刚刚开始使用RxJava,它是Java对ReactiveX的实现 (也称为Rx和Reactive Extensions)。一些真正让我吃惊的庞大规模RxJava的可流动类:它具有460点的方法! 公平起见: 有很多方法被重载,这大大增加了方法的总数。 也许应该拆分此类,但是我对RxJava的知识和理解非常有限。谁创造RxJava的人肯定是非常聪明的,他们可以大概是选择创建提供有效的参数可流动有这么多的方法。 另一方面: RxJava是Microsoft的Reactive Extensions的Java实现,甚至没有Flowable类,因此,这不是盲目移植现有类并用Java实现的情况。 [ 更新:斜体前一点是事实不正确:微软的可观察类,其中有超过400的方法,被用来作为RxJava的基础上可观察类,并且可流动相似,可观察到,但手柄背压的大量数据。因此,RxJava团队正在移植现有的类。这篇文章应该是挑战的原设计可观察到由微软而不是RxJava的类悬浮剂分类] RxJava已有3年多的历史了,因此这并不是由于缺乏对良好(SOLID)类设计原理的了解而导致代码被错误设计的示例(与Java的早期版本一样)。 对于像Flowable这样大的类,其设计本质上是错误的,但也许不是。这个SE问题的一个答案一个类方法的数量限制是多少?建议答案是“ 拥有所需的多种方法 ”。 显然,有些类无论其语言如何,都合法地需要大量方法来支持它们,因为它们不会轻易分解为更小的东西,并且它们具有大量的特征和属性。例如:字符串,颜色,电子表格单元格,数据库结果集和HTTP请求。对于类来说,也许有几十种方法来表示这些东西似乎并不合理。 但是Flowable是否真的需要460种方法,还是它是如此之大以至于它必然是不良类设计的一个例子? [需要明确的是:这个问题,特别是涉及RxJava的可流动类,而不是一般的神的对象。]

7
原始vs类代表简单的域对象?
什么时候使用特定于域的对象与普通字符串或数字的通用准则或经验法则是什么? 例子: 年龄层vs整数? FirstName类与String? 唯一ID与字符串 PhoneNumber类vs字符串vs长? 域名类与字符串? 我认为大多数OOP从业人员肯定会说PhoneNumber和DomainName的特定类。有关使它们变得有效以及如何进行比较的更多规则,使简单的类更易于处理和更安全。但是对于前三个,还有更多的争论。 我从来没有遇到过“年龄”类,但是有人认为它必须是非负数是有道理的(好吧,我知道您可以为负数年龄辩护,但这是一个很好的例子,它几乎等同于原始整数)。 字符串通常代表“名字”,但并不是完美的,因为空字符串是有效字符串,但不是有效名称。比较通常会忽略大小写。当然,有一些方法可以检查是否为空,不区分大小写,等等,但这需要使用者执行此操作。 答案是否取决于环境?我主要关心的是企业/高价值软件,该软件可以生存和维护超过十年。 也许我想得太多了,但是我真的很想知道是否有人对何时选择类还是原始有规则。

2
现在,并不是Java接口中的所有方法声明都是公共抽象的,是否应该使用这些修饰符来声明方法?
从Java 8开始,default方法被引入接口。有效地,这意味着并非in中的所有方法interface都是abstract。 从Java 9(也许)开始,private将允许使用方法。这意味着并非in中的所有方法interface都是public abstract。 问题“在Java接口中的方法是否应使用publicaccess修饰符声明?” 在/programming/161633/should-methods-in-a-java-interface-be-declared-with-or-without-a-public-access-m的堆栈溢出中被询问 那里,大多数答案都认为public abstract不应使用,因为中的任何方法都interface不能是public abstract。这已不再是这种情况。 因此,鉴于接口的这些新功能,是否应该public abstract在Java接口方法声明中使用关键字? 在我的特定环境中,我们将有一些经验丰富的软件工程师,但没有Java经验的人会不时读取Java代码。我觉得,public abstract对于那些不熟悉接口如何具有使用这些关键字的不同规则的历史的人来说,现在将关键字排除在外会造成更多的困惑。

1
相互实现两个Java 8默认方法是否是一种好习惯?
我正在设计一个具有两个相关方法的接口,类似于此方法: public interface ThingComputer { default Thing computeFirstThing() { return computeAllThings().get(0); } default List<Thing> computeAllThings() { return ImmutableList.of(computeFirstThing()); } } 大约一半的实现只会计算一件事,而另一半可能会计算更多。 这在广泛使用的Java 8代码中是否有先例?我知道Haskell在某些类型类中做类似的事情(Eq例如)。 好处是,与拥有两个抽象类(SingleThingComputer和MultipleThingComputer)相比,我必须编写更少的代码。 不利的一面是,一个空的实现可以编译,但是在运行时会用炸掉StackOverflowError。可以使用a来检测相互递归ThreadLocal并给出更好的错误,但这会增加非Buggy代码的开销。

2
我应该如何注释一个类在Java中是不可变的?
最近,我偶然发现了不可变对象的实用性,例如,如果将元素传递给构造函数并且类应该是不可变的,那么如果它们本身不是不可变的,则必须复制这些元素。 这需要对我的项目进行大量检查或了解,因为如果我有 public A(B foo) 而且B不是一成不变的,A我必须复制B。现在想象一下B似乎是不变的,但是它本身在构造函数中具有可变的类,依此类推。 如果类在Java中是不可变的,是否有记录的标准或最佳实践?看来@immutableJavadoc中没有关键字。 该@Immutable注解似乎有什么东西对汽车类生成完全不同的,而不是标准的Java的一部分。

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.