Tag: 设计

使用设计认证将post从Java / Android应用程序保存到rails服务器

我有一个Rails服务器,我希望我的Java桌面应用程序和Android应用程序能够与标准脚手架(new / edit / show / etc)进行交互,这样我就可以在所有内容之间同步数据。 我发现这个( 链接 )显示了基本的想法,但没有显示实际的代码。 问题在于用户需要使用设备登录,因此他们只能看到他们的数据,而不是我的或您的数据! 请帮我解决这个问题。

构建swing UI以实现方法编辑器

我正在构建各种方法编辑器。 方法( MethodModel类)通常具有以下元素 – List inputVariableNames String resultVariableName 现在我有一个MethodModel类,它有上述字段作为其成员。 我还有一个MethodModelContainer类,它包含MethodModelContainer的列表(LinkedList,被调用的方法的顺序很重要), MethodModel是当前文件/类中所有MethodModel的集合。 我试图构建一个swing用户界面,用户可以使用UI编辑一个方法(或编辑一个MethodModel对象)。 我计划通过为每个MacroModel类提供三个按钮来实现这一点,每个按钮用于“向上”和“向下”箭头以向下移动方法调用或向上移动LinkedList,第三个按钮用于打开用户的对话框可以编辑此特定MethodModel对象的成员。 我曾想过在MethodModelContainer的基础上有一个JTable行,其中每行有1个包含3个按钮的单元用于上述用途,每行代表一个MethodModel对象。 现在,只要更新MethodModelContainer,Jtable就需要自我更新。 我已经阅读了一些关于如何将JButtons / Jpanel添加到JTable的示例,并且所有这些示例都涉及编写自定义的单元格渲染器/单元格编辑器,这些东西我还没有找到合适的读物来理解。 关于如何使用Jtable或其他方式实现我的用例的任何指示都会有所帮助。

使用JUnit类别与简单地在单独的类中组织测试

我有两个逻辑类别的测试:简单的functionunit testing(通过/失败)和基准性能测试,仅用于度量/诊断。 目前,我在一个类中有所有测试方法,称之为MyTests : public class MyTests { @Test public void testUnit1() { … assertTrue(someBool); } @Test public void testUnit2() { … assertFalse(someBool); } @Test @Category(PerformanceTest.class) public void bmrkPerfTest1() { … } @Test @Category(PerformanceTest.class) public void bmrkPerfTest2() { … } } 然后我将UnitTestSuite定义为 @RunWith(Categories.class) @Categories.ExcludeCategory(PerformanceTest.class) @SuiteClasses({ MyTests.class }) public class UnitTestSuite {} 和PerformanceTestSuite @RunWith(Categories.class) @Categories.IncludeCategory(PerformanceTest.class) @SuiteClasses({ […]

将SQL与Java代码分开

当我必须连接到数据库时,这是我经常遇到的问题; 如何将SQL与普通的java代码分开? 我通常为数据库连接使用单独的类,但是,当每个数据库中有多个数据库和多个表时,总是很难100%这样做 例如,如果我们想将所有java SQL放在名为DBConnector.java的类中,那么我们如何针对不同的插入,删除,数据检索等进行一般编码? 我认为理想的情况是所有SQL语句应该在同一个类中,并且应该与数据库应用程序范围内的不同类型的相同操作兼容,从而提供与其余代码的逻辑分离。 public void insertData (String db, String table, ) { //generic SQL INSERT statement and execution } public ResultSet retrieveData (String db, String table, ) { //generic retrieval of data } 有没有办法实现这个目标? 或者我们应该只为不同风格的插入,查询等添加function? 谢谢!

为什么Stream操作与收集器重复?

请允许我提出一些投诉,也许这很有意思,但我想描述一下:“ 为什么要提出这个问题? ”。 我在这里回答的问题与其他问题不同,昨晚在这里和这里 。 在我深入研究之后,我发现Stream和Collector之间有许多重复的逻辑违反了不重复自己的原则,例如: Stream#map & Collectors#mapping , Stream#filter & Collectors#filtering in jdk-9 and。等等 但似乎合理,因为Stream遵守Tell,不要问 Demeter的原则/ 法则和collections家遵守inheritance原则的构成。 我只能想到为什么Stream操作与Collector s重复的几个原因如下: 我们不关心如何在大环境中创建Stream 。 在这种情况下, Stream操作比Collector更有效和更快,因为它可以简单地将Stream映射到另一个Stream ,例如: consuming(stream.map(…)); consuming(stream.collect(mapping(…,toList())).stream()); void consuming(Stream stream){…} 收集器function更强大,可以将收集器组合在一起收集流中的元素,但Stream只提供一些有用/高度使用的操作。 例如: stream.collect(groupingBy( …, mapping( …, collectingAndThen(reducing(…), …) ) )); 在执行一些更简单的工作时, 流操作比收集器更具表现力,但它们比收集器更慢,因为它将为每个操作创建新流,并且Stream比收集器更重和更抽象。 例如: stream.map(…).collect(collector); stream.collect(mapping(…, collector)); 收集器不能将短路终端操作应用为Stream 。 例如: stream.filter(…).findFirst(); 是否有人可以提出其他不利/优势,为什么Stream操作与收集器重复? 我想重新理解它们。 提前致谢。

抽象类中是否有任何空的具体方法?

我最近在查看一些开源代码PicketLink代码。 如果你看一下这个类 ,你会在抽象类中看到一些什么都不做的具体方法。 这有什么用途吗? 我想到了两件事: 如果该方法需要被子类覆盖而未在父抽象类中定义,为什么不简单地将其设为抽象? 如果只有一些子类实际上需要实现该方法,那么这是否表明需要重构类层次结构,以便不强迫孩子使用不适用的方法?

使用类变量与将本地变量发送到函数/方法

何时将局部变量作为参数推送到函数/方法,而不是使用类变量代替函数/方法变量。 例如,我可以有一个function: int DoSomething(int var) { if(var == -1) return 0; } 或者我可以有一个类变量“_var”并在同一个函数中使用它,如下所示: int DoSomething() { if(_var == -1) return 0; } 我的想法是,如果我们在一些函数/方法中使用了一个类变量,在上面的例子中称为DoSomething ,我应该将DoSomething函数/方法作为参数发送给类变量,以便函数更容易阅读和测试。 什么时候做好forms? 我知道这是一个有问题的问题,但是我试图用同事来说明我的论点,他们说我会在函数/方法签名中添加更多代码,而不是保留函数/方法签名较小。 在我看来,我通过将类变量推送到相应的函数/方法来使代码更清晰,更容易维护,而不是强迫它们依赖/了解类变量的存在。 请指教。

我为什么要使用嵌套类?

什么时候嵌套类是可行的? 我看到它最常见的优点是“共享范围”(跨类使用变量)。 这不是一个最好的做法,而不仅仅是将嵌套类放在它自己的文件中,并通过构造函数传递参数?

数组的getter和setter

我有几个关于数组的getter和setter的问题。 假设我们有一个这样的类,它在构造函数中创建一个数组的私有副本: import java.util.Arrays; public class Foo { private int[] array; public Foo(int[] array) { this.array = Arrays.copyOf(array, array.length); } } 我们希望只通过getter和setter访问/变异数组。 如果我们有一个看起来像这样的吸气剂: public int[] getArray() { return array; } 当我们返回一个允许用户直接修改数组元素的引用时,它会破坏getter的目的。 例如 Foo foo = new Foo(someArray); … int[] bar = foo.getArray(); bar[0] = 123; // Now foo.array[0] = 123 and we haven’t used a […]

为什么要处理超出范围的java.awt.Window?

我在我们的应用程序中发现的一个内存泄漏是java.awt.Window.allWindows私有静态字段,它跟踪实例化的每个Window 。 我们创建,使用,然后忘记了对话框,期望这些对话框会消失并被垃圾收集。 这个私有字段无限期地将它们保留在范围内,直到在它们上调用dispose()方法。 根据定义,当他们超出范围时,我们不能这样做。 我不明白为什么这是这样设计的。 与垃圾收集的精神相反,当我完成Window对象时,必须明确地让系统知道。 显然我已经完成了它,因为它超出了范围。 我理解dispose()方法正在做什么:摆脱系统对等对象。 我确实理解这是在Java之外,你需要一些方法来做到这一点,并且Swing不应该只是失去对这些对象的跟踪,否则它会有内存泄漏。 但是,当我永远不再使用它时,通过永久保持对我的Window的引用来实现什么? 有人可以解释为什么这是必要的吗?