Questions tagged «java»

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

4
参数再次将二进制文件检入SCM
我在一家主要构建Java应用程序的公司工作,我试图说服所有人停止将二进制文件(依赖项和最终产品)检入SCM。 他们知道这是一个不好的做法,但是他们认为“有效”,即使很多人都了解Maven和除Ant之外的其他构建工具,这也不是真正的问题。经理和程序员(大约50人)都准备好听取任何反对意见,甚至承认这是对备份空间的浪费,但是我要说服自己,因为习惯的改变会涉及很多工作。您使用什么论据来支持变更? 编辑:好的,区分几乎不变的文件(如依赖项)和生成的文件是有意义的。即使这样,我还是有理由反对后者。
10 java  builds 

2
只有吸气剂的接口有代码气味吗?
(我已经看到了这个问题,但是第一个答案更多的是关于自动属性而不是设计,而第二个答案则是向使用者隐藏数据存储代码,我不确定这是我想要的/我的代码做了什么,所以我想听听其他意见) 我有两个非常相似的实体,HolidayDiscount和RentalDiscount,它们表示长度折扣,即“如果至少持续numberOfDays使用percent折扣,则适用”。这些表有不同的父实体,并且在不同的地方使用,但是在使用它们的地方,有一种通用的逻辑来获取最大的适用折扣。例如,a HolidayOffer具有多个HolidayDiscounts,在计算其成本时,我们需要找出适用的折扣。租金和相同RentalDiscounts。 由于逻辑相同,因此我想将其放在一个地方。这就是以下方法,谓词和比较器的作用: Optional<LengthDiscount> getMaxApplicableLengthDiscount(List<LengthDiscount> discounts, int daysToStay) { if (discounts.isEmpty()) { return Optional.empty(); } return discounts.stream() .filter(new DiscountIsApplicablePredicate(daysToStay)) .max(new DiscountMinDaysComparator()); } public class DiscountIsApplicablePredicate implements Predicate<LengthDiscount> { private final long daysToStay; public DiscountIsApplicablePredicate(long daysToStay) { this.daysToStay = daysToStay; } @Override public boolean test(LengthDiscount discount) { return daysToStay >= …


5
OOP:在哪些情况下,基于类的设计比基于接口的设计更好?
我正在阅读 JDOM的网站。 为什么用具体的类而不是接口来定义JDOM API? Jason Hunter总结了针对JDOM的基于接口的API的论点: 使用接口,所有东西都变成了工厂,必须将元素“导入”到新文档中,而不是仅仅添加元素,不能保证诸如长期序列化之类的功能,因此清单还在继续。 我们实际上是从接口开始的。在对某些同伴的发行前审查中,我们收到了反馈,应该尝试具体的课程。我们做到了,并且设计对此要好得多。 我是初学者。到目前为止,我所听到的所有建议都建议不要将设计与具体类一起使用。 可能在某些地方使用具体的类是适当的。是否存在在设计中使用具体类的常见类问题?

1
如何使用样本数据正确记录算法?
我想知道算法文档应包含什么?找不到合适的指导方针可以遵循。我想包括 算法总结 算法说明 流程图 伪代码 样本输入数据集(多个) 输出数据 单元测试 实验 客户要求提供这样的文档,以便:对我们自己的号码保持信心,并向潜在客户描述我们的流程,以便他们知道我们正在采取步骤来检查和验证我们的计算。 这样的文档看起来如何?(示例PDF) 您将在本文档中进一步包括什么? 我列举的是那么好,还是应该以不同的方式记录下来? 您将如何在Google中搜索此类文档样本?

4
为什么通过静态方法传递对象会有好处?
为什么使用静态方法并将引用作为参数传递给对象而不是在对象上调用该方法会有好处? 为了阐明我的意思,请考虑以下课程: public class SomeClass { private double someValue; public SomeClass() { // Some constructor in which someValue is set } public void incrementValue() { someValue++; } } 与使用静态方法的此替代实现相比: public class SomeClass { private double someValue; public SomeClass() { // Some constructor in which someValue is set } public static …

1
“ TILT”在评论中是什么意思?
我正在阅读Robert C. Martin的Clean Code,该短语TILT在某些代码示例中莫名其妙地出现。示例(顺便说一下,它是在Java中): ... public String errorMessage() { switch (status) { case ErrorCode.OK: // TILT - Should not get here. return ""; case ErrorCode.UNEXPECTED_ARGUMENT: return "Unexpected argument"; case ErrorCode.MISSING_ARGUMENT: return "Missing argument"; ... } ... 从上下文来看,我猜测是TILT指定一个无法访问的状态,并且仅包含该状态以满足编译器的要求(例如,在上面的代码中,TILT出现这种ErrorCode.OK情况是因为如果状态为OK,则不会出现错误消息),但是我不确定。 有人知道TILT代表/意味着什么吗?

2
异常的粒度
我和几个朋友之间进行了辩论。他们更喜欢一般性例外,例如作为例外的字段ClientErrorException并ServerErrorException有详细信息,而我更喜欢使事情更具体。例如,我可能有一些例外,例如: BadRequestException AuthenticationFailureException ProductNotFoundException 这些都是基于API返回的错误代码构建的。 遵循异常的优点,这对于Java来说似乎是惯用的。但是,我朋友的意见并不少见。 就代码可读性和API可用性而言,是否存在首选方法,或者它真的只是偏爱首选项?

1
如何管理项目中的非单元测试?
我在我的项目中亲自调用tests了一些不是单元测试的代码。它们旨在运行,并且结果必须由人工评估。我这样做是因为我正在制造物理引擎,并且在开发过程中,我需要查看自己在做什么。所以我simulation在测试模块中做了一个包装。从技术上讲,这是单元测试,因为模拟使用的是单元测试库,但我并不是要像实际的单元测试一样运行它们。 我想做的是将那些特殊测试与单元测试区分开来,因为我想轻松地运行所有单元测试。我认为这有点像功能测试。您是否遇到过必须为功能测试准备应用程序的情况?功能测试准备(基本上是我的模拟测试)应该放在项目中的什么位置,以及如何将它们与单元测试区分开来? 我在Java中,因此我可以将所有方法签名从更改为@Test public void myNamedTest(),public static void main(String[] args)但是使用仿真对我来说既费力又不实用。 我junit在一个gradle项目中使用。gradle欢迎使用创建特殊测试文件夹的任何解决方案。

1
当对象仅使用部分接口时,如何构造接口?
我有一个项目,其中有两个类都需要更新同一张表的数据库访问对象。框架和项目的约束使得它无法合并这两个类。我在下面创建了一个案例,展示了如何进行设置。A类需要能够更新和读取记录,而B类需要能够更新和删除记录。 如果我按原样使用这些类,则可以正常工作,但是我对每个类都需要不使用它的功能这一事实感到怀疑。例如,为了使用类A,我必须将实现删除功能的dao传递给它,即使它永远不会被调用。同样,我必须将实现read函数的dao传递给B类,但它永远不会被调用。 我考虑过通过继承其他接口(IReadDao,IUpdateDao,IDeleteDao是将要继承的dao)来实现该方法,但是这种方法对于每种功能组合(IUpdateAndRead,IReadAndDelete,IReadAndUpdate ... ) 我想为dao使用接口,因为我不想将应用程序与数据库耦合。有没有一种模式或方法可以实现任何人都知道的我想要的东西?提前致谢。 class IDao { void update(ModelDao model); void delete(String guid); ModelDao read(String guid); } Class A { private IDao dao; public A(IDao dao) { this.dao = dao; } public void doStuff() { ModelDao model = new ModelDao(); ... dao.update(model); } public void readThenDoSomething(String id) { …

2
如何在用Java编写的API中封装内部类?
我们必须编写一个库。自然地,它应该只具有非常小的API(尽可能广泛且尽可能小的)。库的内部结构有些复杂。因此,它们需要结构化。 对于结构化,我目前看到两种方法: 1.使用包装。 优点:库可以结构整齐。一切都在其位置。 缺点:通过包边界使用类需要公共类,因此扩展了整个库的API。 2.使用静态内部类,全部在一个包中。 优点:只需要很少的公共事物(类,方法等)。 缺点:类被隐藏只是为了构造它们。这将是使用大量静态内部类的极少数用例之一。开发人员不习惯于此,可能会忽略它们。 有没有更好的方法来在结构良好的库中实现小型API? 编辑:我忘了提及:这是一个Android库。因此,没有java9。

3
接口依赖于具体类是否可以?
我在Java中为自定义错误处理程序创建接口。 想要传递一个参数错误对象,但我需要它成为Exception类的子对象。 在接口中使用我定义的类名可以吗? 就不依赖于任何实现而言,这是否会使它减少接口的数量? 我尝试做这样的事情: public class CustomException { /* ... Implementation ... */ } public interface Interface { void onError(CustomException ex); }

2
当观察者彼此不独立时,观察者模式是否合适?
我有一个class Car具有2个属性的属性:int price和boolean inStock。它还持有List的abstract class State(空类)。可以在汽车上应用两种状态,每种状态由其自己的类表示:class Upgrade extends State和class Shipping extends State。 A Car可以容纳2个状态中的任何一个。各州有以下规则: Upgrade:加到1汽车本身适用的每个州的价格上。 Shipping:如果Shipping列表中至少有1个状态,则将inStock其设置为false。 例如,以price = 1和开头inStock = true: add Shipping s1 --> price: 1, inStock: false add Upgrade g1 --> price: 1, inStock: false add Shipping s2 --> price: 2, inStock: false add Shipping s3 --> price: …

1
代码设计:委托任意函数
在PPCG上,我们经常遇到“山丘之王”挑战,这使不同的代码bot相互竞争。我们不希望将这些挑战限制为单一语言,因此我们通过标准I / O进行跨平台通信。 我的目标是编写一个框架,使挑战编写者可以使用它来简化编写这些挑战的过程。我想满足以下要求: 挑战编写者可以创建一个类,其中方法表示每种不同的通信。例如,在我们的《善与恶》挑战中,作者将创建一个Player具有abstract boolean vote(List<List<Boolean>> history)方法的类。 当调用上述方法时,控制器能够提供通过标准I / O进行通信的上述类的实例。也就是说,并非上述类的所有实例都必须通过标准I / O进行通信。其中的3个机器人可能是本机Java机器人(简单地覆盖了Player该类,另外2个机器人则使用另一种语言) 这些方法将不会总是具有相同数量的参数(也不会总是具有返回值) 我希望挑战编写者必须尽可能少地工作才能使用我的框架。 我不反对使用反射来解决这些问题。我考虑过要求挑战编写者做类似的事情: class PlayerComm extends Player { private Communicator communicator; public PlayerComm(Communicator communicator){ this.communicator = communicator; } @Override boolean vote(List<List<Boolean>> history){ return (Boolean)communicator.sendMessage(history); } } 但是如果有几种方法,这可能会很重复,而且持续进行强制转换并不有趣。(sendMessage在此示例中,将接受可变数量的Object参数,并返回Object) 有一个更好的方法吗?

2
为什么每一个都有冒号而不是“中”?
从Java 5语言指南: 当您看到冒号(:)时,将其读为“ in”。 那么为什么不in首先使用呢? 多年来一直困扰着我。因为它与其他语言不一致。例如,在Java有implements,extends,super对于类型,而不是符号之间的关系类似于C ++,Scala的或Ruby。 在Java中,冒号在5个上下文中使用。其中三个继承自C。另外两个则由Joshua Bloch认可。至少,那是他在“关闭争议”演讲中说的。当他批评冒号的映射与for-each语义不一致时,就会出现这种情况。在我看来,这很奇怪,因为这是每个人滥用的预期模式。喜欢list_name/category: elements或laberl/term: meaning。 我已经窥探了jcp和jsr,但是没有发现邮件列表的迹象。谷歌未对此事进行任何讨论。只有新手对冒号的含义感到困惑for。 in迄今为止提供的主要反对意见: 需要新的关键字;和 使词汇复杂化。 让我们看一下相关的语法定义: 声明 :'for''(('forControl')'语句 | ... ; forControl :EnhancedForControl | forInit?';' 表达?';' forUpdate? ; EnhancedForControl :variableModifier *类型variableDeclaratorId':'表达式 ; 从更改:为in不会带来额外的复杂性或需要新的关键字。
9 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.