小编mdm*_*dma的帖子

当没有指定默认构造函数时,java序列化如何反序列化最终字段?

我有一个定义不可变值类型的类,我现在需要序列化.不变性来自构造函数中设置的最终字段.我已经尝试过序列化,它的确有效(令人惊讶的是?) - 但我不知道如何.

这是该课程的一个例子

public class MyValueType implements Serializable
{
    private final int value;

    private transient int derivedValue;

    public MyValueType(int value)
    {
        this.value = value;
        this.derivedValue = derivedValue(value);
    }

    // getters etc...
}
Run Code Online (Sandbox Code Playgroud)

鉴于该类没有没有arg构造函数,它如何实例化并设置最终字段?

(旁边 - 我注意到这个类特别是因为IDEA没有为这个类生成"no serialVersionUID"检查警告,但是成功地为我刚刚可序列化的其他类生成了警告.)

java serialization final

49
推荐指数
3
解决办法
2万
查看次数

java中的轻量级发布/订阅框架

是否有一个提供发布/订阅模式的java的轻量级框架?

一些理想的功能

  • 支持泛型
  • 向发布者注册多个订阅者
  • API主要是接口和一些有用的实现
  • 纯粹的内存,持久性和事务保证不是必需的.

我知道JMS,但这对我的需求来说太过分了.发布/订阅数据是扫描文件系统的结果,扫描结果被送到另一个组件进行处理,然后在被送到另一个组件之前进行处理,依此类推.

编辑:所有在同一过程中.来自beans的PropertyChangeListener并没有完全削减它,因为它报告了属性的变化,而不是发布特定的项目.我可以通过拥有"最后发布的对象"属性以及已发布的对象来使用工作模式来使用ProprtyChangeListener.PropertyChangeListeners不支持泛型,并且在属性更改语义中是根深蒂固的,而不是纯粹的发布/订阅.java.util Observer/Observable模式会很好,但是Oberver是一个具体的类.

java frameworks publish-subscribe

44
推荐指数
3
解决办法
4万
查看次数

为什么公共静态最终数组是安全漏洞?

有效的java说:

//潜在的安全漏洞!

static public final Thing [] VALUES = {...};

谁能告诉我什么是安全漏洞?

java effective-java

38
推荐指数
3
解决办法
2万
查看次数

为什么java.lang.Throwable是一个类?

在-able结尾的接口java的形容词Serializable,Comparable等等......那么,为什么是Throwable一类?如果Throwable是接口,异常处理会不会更容易?(编辑:例如,异常类不需要扩展Exception/RuntimeException.)

显然,现在改变它是不可能的.但它可以抽象吗?这不会避免不良做法throw new Throwable();

java class-design exception-handling

38
推荐指数
2
解决办法
1万
查看次数

使注释可用于泛型类型

给定一个通用接口

interface DomainObjectDAO<T>
{
   T newInstance();
   add(T t);
   remove(T t);
   T findById(int id);
   // etc...    
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个指定type参数的子接口:

  interface CustomerDAO extends DomainObjectDAO<Customer> 
  {
       // customer-specific queries - incidental.
  }
Run Code Online (Sandbox Code Playgroud)

实现需要知道实际的模板参数类型,但是当然类型擦除手段在运行时不可用.我可以包含一些注释来声明接口类型吗?就像是

  @GenericParameter(Customer.class)
  interface CustomerDAO extends DomainObjectDAO<Customer> 
  {
  }
Run Code Online (Sandbox Code Playgroud)

然后,实现可以从接口获取此批注,并将其用作运行时泛型类型访问的替代.

一些背景:

此接口使用JDK动态代理为实现概述这里.这个接口的非泛型版本运行良好,但使用泛型更好,而不必在子接口中创建方法只是为了指定域对象类型.泛型和代理处理大多数事情,但在运行时需要实际类型来实现该newInstance方法等.

java generics annotations

11
推荐指数
1
解决办法
8648
查看次数

spring - 构造函数注入和覆盖嵌套bean的父定义

我已经阅读了关于继承bean定义的Spring 3参考,但我对可能和不可能的内容感到困惑.

例如,一个带有协作者bean的bean,配置值为12

<bean name="beanService12" class="SomeSevice">
    <constructor-arg index="0" ref="serviceCollaborator1"/>
</bean>

<bean name="serviceCollaborator1" class="SomeCollaborator">
    <constructor-arg index="0" value="12"/> 
    <!-- more cargs, more beans, more flavor -->
</bean>
Run Code Online (Sandbox Code Playgroud)

然后,我希望能够创建类似的bean,配置略有不同的协作者.我能做点什么吗

   <bean name="beanService13" parent="beanService12">
       <constructor-arg index="0">
          <bean>
             <constructor-arg index="0" value="13"/>
          </bean>
       </constructor>
   </bean>
Run Code Online (Sandbox Code Playgroud)

我不确定这是否可能,如果是的话,感觉有点笨拙.是否有更好的方法来覆盖大型嵌套bean定义的小部分?似乎子bean必须非常了解父类,例如构造函数索引.

这是一个玩具示例 - 实际上,服务是依赖于许多其他协作者bean的大型bean定义,这些bean还具有其他bean依赖性.例如,创建了一系列处理程序,每个bean引用链中的下一个,引用下一个.我想创建一个几乎完全相同的链,中间的处理程序有一些小的变化,我该怎么做?

我不想改变结构 - 服务bean使用协作者来执行他们的功能,但我可以添加属性并使用属性注入,如果这有帮助的话.

这是一个重复的模式,会创建自定义架构帮助吗?

谢谢你的建议!

编辑:我的问题的核心是,如果我有一个非常大的bean定义,创建一个复杂的bean的bean(bean有正确的bean等),我想创建一个几乎相同的bean一些变化,我该怎么做?如果您的解决方案必须使用适当的,或者可以使用构造函数注入,请提及.

嵌套与顶级bean不是问题(事实上,我认为所有bean都是实践中的顶级bean.)

EDIT2:到目前为止,感谢您的回答.FactoryBean可能就是答案,因为这会降低spring上下文的复杂性,并允许我仅将差异指定为工厂的参数.但是,将一大块上下文推回到代码中并不合适.我听说spring可以和脚本一起使用,比如groovy - 那提供了另一种选择吗?工厂可以在groovy中创建吗?

java spring

9
推荐指数
2
解决办法
2万
查看次数

Java - 何时使用notify或notifyAll?

为什么java.lang.Object有两种通知方法 - notifynotifyAll?似乎notifyAll至少一切都notify做了,所以为什么不一直使用notifyAll?如果notifyAll用来代替notify,程序是否仍然正确,反之亦然?是什么影响了这两种方法之间的选择?

java concurrency multithreading synchronization

9
推荐指数
1
解决办法
1万
查看次数

如何使用签名创建方法作为List

我是Java编程语言的新手,所以这可能是一个愚蠢的问题,但我不得不问它,因为我无法自己弄明白.这是交易.

我想创建从列表中提取某些对象类型的方法.因此该方法应该接收List作为参数,意味着list应该包含Object1或Object2.我试过这样的:

   public Object1 extractObject(List<Object>){
    //some pseudo-code 
   ... loop trough list and check if list item is instance of object one return that instance
    }
Run Code Online (Sandbox Code Playgroud)

使用List<?>as方法参数声明方法的问题是我从eclipse收到编译错误Syntax error on token ">", VariableDeclaratorId expected after this token.

如何正确设置方法签名以接受Object1或Object2的对象类型?谢谢

这是我的代码:

protected Object1 getObject1(List<Object> list){
        for(Object obj : list) {
            if(obj instanceof Object1) {
                return (Object1) obj;
            }
        }
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

编辑 - 这两者之间有什么区别:

public Object1 getObject1(List<Object> list){
        for(Object obj : list) {
            if(obj instanceof Object1) {
                return (Object1) …
Run Code Online (Sandbox Code Playgroud)

java generics collections

5
推荐指数
1
解决办法
1046
查看次数

减少痛苦写入集成和系统测试

我想为我的应用程序进行集成测试和系统测试,但是产生良好的集成和系统测试通常需要我付出很多努力,而我并没有费心.我尝试了几次,我编写了定制的,特定于应用的测试线束,这种感觉就像每次重新发明轮子一样.我想知道这是不是错误的做法.是否存在集成和完整系统测试的"标准"方法?

编辑:澄清,它是桌面和Web应用程序的自动化测试.理想情况下,它是一个完整的测试套件,可以运行应用程序的全部功

java integration-testing system-testing

4
推荐指数
1
解决办法
606
查看次数