Questions tagged «java»

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

8
JSF是否真的准备交付高性能Web应用程序?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 我听说过很多有关JSF的好处,但据我所知,过去人们也对该技术有很多严重的抱怨,却不知道情况有多大改善。我们正在考虑将JSF作为社交网络项目的可能技术。但是我们不知道JSF的性能得分,也无法真正遇到使用JSF的任何现有高性能网站。人们抱怨它的性能可伸缩性问题。 我们仍然不太确定我们是否通过选择jsf做正确的事情,因此希望听到您的所有意见并考虑您的意见。 是否可以配置JSF以满足社交网络服务的高性能需求?同样,要解决JSF当前的问题,在多大程度上可以生存。它到底有什么问题? 我并不 担心其他人通常会抱怨的与JSF的开发复杂性,因为根据我的个人经验,我认为这并不是真的,但是我更担心什么性能和可伸缩性问题。并且,请不要仅仅在与旧版本相关的旧问题上滥用它。我只是在乎现在的状态,无论过去是什么。


6
如果java.lang.String不是最终的,那该怎么办?
我是Java开发人员多年,最终,在主修课程后,我有时间认真学习它,以参加认证考试……一件事一直困扰着我,那就是String是“最终的”。当阅读有关安全性问题和相关内容时,我确实理解它。但是,认真地讲,有没有人有真实的例子呢? 例如,如果String不是最终的,会发生什么?就像不是在Ruby中一样。我还没有听到来自Ruby社区的任何抱怨……而且我知道StringUtils和相关类必须实现自己或通过网络搜索才能实现该行为(4行代码),愿意。
16 java  security 

5
为什么在Java上使用Scala
已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我完全沉迷于Scala作为一种语言……但我仍然为为什么任何公司都应该从Java转向Scala而感到困惑。Scala仅仅是在JVM之上的语法糖,还是Scala在Java上有根本的改进,可以改善现实世界的应用程序?
16 java  scala 

20
编写无效代码有用吗?
您觉得编写无效代码有用吗? 有人说:“如果您有2种逻辑来执行某些操作,则不要使其他逻辑代码成为注释或删除代码,而使其成为无效代码,因为这不会影响该操作。” 例:- if(true){ // logic - 1 } else { // logic - 2 // dead code } 是真的吗 我通常不编写无效代码,而只是删除第二个逻辑。
16 java 

4
命令行选项样式-POSIX还是什么?
在某处,我看到有人反对使用Java和Javac混合使用Windows和Unix风格, java -classpath ... -ea ... Something 恕我直言,这是没有关系的,就像find作品一样,不是吗?AFAIK,根据POSIX,语法应类似于 java --classpath ... --ea ... Something 并-abcdef意味着一次指定6个简短选项。我不知道哪个版本通常导致更少的键入和更少的错误。 我正在用Java编写一个小型实用程序,在任何情况下都不会使用Windows风格,/a /b因为我主要对Unix感兴趣。我应该选择哪种风格?

4
Java中的类变量和实例变量之间有什么区别?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 4年前关闭。 我对Java还是很陌生,想了解类变量和实例变量之间的区别。 例如: class Bicycle { static int cadence = 0; int speed = 0; int gear = 1; } 实例变量和类变量之间有何不同?这里的哪些变量是类变量,哪些是实例变量?这如何影响范围?
16 java  class  object  instance 

5
我应该在Java中使用初始化程序块吗?
最近,我遇到了一个从未见过的Java构造,并且想知道是否应该使用它。它似乎被称为初始化程序块。 public class Test { public Test() { /* first constructor */ } public Test(String s) { /* second constructor */ } // Non-static initializer block - copied into every constructor: { doStuff(); } } 代码块将复制到每个构造函数中,即,如果您有多个构造函数,则不必重写代码。 但是,我看到使用此语法的三个主要缺点: 这是Java中极少数情况下代码顺序很重要的情况之一,因为您可以定义多个代码块,并且它们将按照编写的顺序执行。这对我来说似乎很有害,因为仅更改代码块的顺序实际上就会更改代码。 使用它并没有带来任何好处。在大多数情况下,构造函数会使用一些预定义的值相互调用。即使不是这种情况,也可以将代码简单地放入私有方法中,并从每个构造函数中调用。 它会降低可读性,因为您可以将代码块放在类的末尾,而构造函数通常在类的开始。如果您认为不必要查看代码文件的完全不同的部分,这是违反直觉的。 如果我的上述说法是正确的,为什么(和何时)引入了这种语言结构?有合法的用例吗?
16 java 

2
数据验证:是否是分隔类?
当我有大量需要验证的数据时,我应该仅出于验证目的创建一个新类,还是应该坚持方法内验证? 我的特定示例设想了一个锦标赛和一个事件/类别类:Tournament和Event,它模拟了一个体育锦标赛,每个锦标赛都有一个或多个类别。 这些类别中有很多事情需要验证:球员应该为空,应该是唯一的,每个球员应该参加的比赛数量,每次比赛都有的球员数量,预定义的对决,以及包括许多其他东西在内的非常重要的事情。复杂的规则。 我还需要整体验证某些部分,例如类如何相互集成。例如,对a Player进行单一验证就可以了,但是如果一个事件两次具有相同的玩家,那就是验证错误。 那怎么办呢::使用模型类的设置器和类似方法添加数据时,我完全忘记了任何预检查,而是让验证类来处理。 因此,我们将有类似EventValidator与Event作为成员,和validate()用来验证整个对象的方法,再加上单一的方法来验证所有成员的规则。 然后,在实例化有效对象之前,我将执行验证以防止出现非法值。 我的设计正确吗?我应该做些不同的事情吗? 另外,我应该使用布尔值返回验证方法吗?或者,如果验证失败,则抛出异常?在我看来,最好的选择是布尔返回方法,并在实例化对象时引发异常,例如: public Event() { EventValidator eventValidator = new EventValidator(this); if (!eventValidator.validate()) { // show error messages with methods defined in the validator throw new Exception(); // what type of exception would be best? should I create custom ones? } }
16 java  design  data  validation 

6
如何用近似相等实现浮点哈希
假设我们有以下Python类(Java中存在的问题与equals和相同hashCode) class Temperature: def __init__(self, degrees): self.degrees = degrees degrees开尔文的温度在哪里?现在,我想实现平等的测试和哈希为Temperature的方式, 比较浮点数到ε差,而不是直接相等测试, 并履行a == b隐含的合同hash(a) == hash(b)。 def __eq__(self, other): return abs(self.degrees - other.degrees) < EPSILON def __hash__(self): return # What goes here? Python文档讨论了一些关于确保数字哈希hash(2) == hash(2.0)的问题,但这并不是完全相同的问题。 我是否在正确的轨道上?如果是这样,在这种情况下实现散列的标准方法是什么? 更新:现在我知道这种浮点数相等性测试消除了==和的可传递性equals。但是,如何将其与浮动的“常识”一起使用,不应该直接进行比较?如果通过比较浮点数实现相等运算符,则静态分析工具会抱怨。他们这样做正确吗?

1
Java记录器:静态块初始化或变量声明中的初始化
目前,我正在通过以下方式在项目中使用logger: private static final Logger LOGGER; static{ LOGGER = logger.getLogger(); } 我获得了使用静态块初始化logger变量的代码审查。有人告诉我在声明语句本身中初始化logger变量。 private static final Logger LOGGER = Logger.getLogger(); 我试图弄清楚如果不在静态块中初始化它会有什么区别。我想知道这是否是一种做法。
15 java 

5
如果有条件,则返回set.add()的布尔值?
set类的add运算符返回一个布尔值,如果元素(要添加的元素)不存在则为true,否则为false。在写字 if (set.add(entry)) { //do some more stuff } 在编写简洁的代码方面被认为是好的风格?我想知道既然您一次执行两项操作。1)添加元素,2)检查元素是否存在。

4
在Java中无需空检查就可以获取值
很多时候,我发现自己从某些数据层次结构中获取值时会进行空检查,以避免NullPointerExceptions,因为我发现NullPointerExceptions容易出错并且需要大量样板。 我编写了一个非常简单的例程,使我在获取对象时可以跳过空检查... public final class NoNPE { public static <T> T get(NoNPEInterface<T> in) { try { return in.get(); } catch (NullPointerException e) { return null; } } public interface NoNPEInterface<T> { T get(); } } 我有点像这样 Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom()); 上面的结果导致我得到一个Room对象或一个null,而不必对所有父级进行null检查。 您如何看待以上内容?我在创建有问题的模式吗?您认为有更好的方法吗?
15 java  null 

3
在微服务之间共享DTO对象
TL; DR-可以在服务之间共享POJO库吗? 通常,如果可能的话,我们希望将服务之间的共享严格限制为无共享。共享数据的服务是否应提供客户端库供客户端使用一直存在争议。客户端库通常对于服务的客户端是可选的,并且可以使用API​​,但是无论他们愿意使用API​​,还是使用客户端库还是使用替代语言并使用库的一般方面,等等。 就我而言-我考虑一种创建数据对象的服务。假设此对象是PET。不是数据库实体,而是严格地隐式表示基础数据的POJO。该POJO是API定义的。假设:宠物-年龄,体重,姓名,所有者,地址,种类等。 服务1 -PetKeeper:无论出于何种原因,它都会生成一个pet,并保留所有数据,并且必须引用此服务来获取pet,或者对pet进行修改,可以说名称更改或地址更改必须通过以下方式完成:此服务的API调用。 服务2 -PetAccessor:此服务收集宠物并进行验证检查 服务3,4-更多中间服务呼叫 服务5-用户界面 这些都是很随意的,但重点很简单。UI或某些面向用户的服务希望以某种方式呈现此“ PET”对象。它必须通过API调用一个服务,该服务调用一个服务,再调用一个服务,依此类推,直到到达收集所需信息并开始中继的服务为止。最后,UI服务具有要显示的PET对象。 这很普遍-但出于我们的绝对思想,我们在每次服务中都复制了PET对象。DRY(请勿重复)原则仅适用于服务内的代码,不适用于所有服务,但重点仍然存在。如果我们添加一个字段怎么办...我们必须在每个字段中修改POJO的5个服务。 -或-我们可以提供一个Pet-Objects-Library,其中包含API中的一些pojo,并且每个服务都可以导入/依赖该库。与服务本身无关,而与常规库无关。我喜欢这个想法,以便每个服务都具有相同类型的对象,并且更新更加容易。但是我担心神物。 优点/缺点是什么-最佳设计是什么?您做了什么在服务之间传递数据,以最大程度地减少重复执行相同的POJO类,同时保持解耦状态?

1
消费者/生产者与观察者/可观察者之间的差异
我正在设计一个包含三个部分的应用程序: 监视某些事件(文件创建,外部请求等)发生的单个线程 N个工作线程通过处理它们来响应这些事件(每个工作进程处理并消耗一个事件,并且处理可能需要花费可变的时间) 一个控制器,用于管理那些线程并执行错误处理(线程重新启动,结果记录) 尽管这是非常基本的,并且不难实现,但我想知道这样做的“正确”方法是什么(在Java的这种具体情况下,但也希望有更高的抽象答案)。我想到两种策略: 观察者/可观察者:监视线程由控制器观察。在发生事件的情况下,然后会通知控制器,并可以将新任务分配给可重用的缓存线程池中的空闲线程(如果所有线程当前都忙,请等待并将任务缓存在FIFO队列中)。工作线程实现Callable并返回结果(或布尔值)成功或返回错误,在这种情况下,控制器可以决定要执行的操作(取决于发生的错误的性质)。 生产者/消费者:监视线程与控制器(事件队列)共享一个BlockingQueue,并且控制器与所有工作器(任务队列和结果队列)共享两个。在发生事件的情况下,监视线程将任务对象放入事件队列中。控制器从事件队列中获取新任务,对其进行审阅并将其放入任务队列中。每个工作人员都在等待新任务,并从任务队列中获取/使用它们(先到先服务,由队列本身进行管理),然后将结果或错误放回到结果队列中。最后,控制器可以从结果队列中检索结果,并在出现错误的情况下采取相应的步骤。 两种方法的最终结果是相似的,但是它们都有细微的差别: 使用观察者,线程的控制是直接的,每个任务都归属于特定的新生成的工作程序。创建线程的开销可能更高,但是由于缓存了线程池,因此开销并不大。另一方面,“观察者”模式被简化为单个“观察者”模式,而不是多个观察者模式,这与其设计的目的不完全相同。 队列策略似乎更容易扩展,例如,添加多个生产者而不是一个生产者很简单,不需要任何更改。不利之处在于,即使根本不做任何工作,所有线程也将无限期运行,并且错误/结果处理看起来不像第一个解决方案那样优雅。 在这种情况下最合适的方法是什么?为什么?我发现很难在线找到该问题的答案,因为大多数示例仅处理明确的案例,例如用“观察者”案例更新许多具有新值的窗口或与多个消费者和生产者进行处理。任何输入,不胜感激。

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.