小编Chs*_*y76的帖子

修改Java中的最终字段

让我们从一个简单的测试用例开始:

import java.lang.reflect.Field;

public class Test {
  private final int primitiveInt = 42;
  private final Integer wrappedInt = 42;
  private final String stringValue = "42";

  public int getPrimitiveInt()   { return this.primitiveInt; }
  public int getWrappedInt()     { return this.wrappedInt; }
  public String getStringValue() { return this.stringValue; }

  public void changeField(String name, Object value) throws IllegalAccessException, NoSuchFieldException {
    Field field = Test.class.getDeclaredField(name);
    field.setAccessible(true);
    field.set(this, value);
    System.out.println("reflection: " + name + " = " + field.get(this));
  }

  public static void main(String[] args) throws …
Run Code Online (Sandbox Code Playgroud)

java reflection final

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

通过反射获取给定类的可访问方法列表

有没有办法获得给定类可以访问(不一定是公共)的方法列表?有问题的代码将在一个完全不同的类中.

例:

public class A {
  public void methodA1();
  protected void methodA2();
  void methodA3();
  private void methodA4();
}

public class B extends A {
  public void methodB1();
  protected void methodB2();
  private void methodB3();
}
Run Code Online (Sandbox Code Playgroud)

上课B我想得到:

  • 所有自己的方法
  • methodA1methodA2从类A
  • methodA3当且仅当类B与包在同一个包中时A

methodA4永远不应该包括在结果中,因为它不能被类访问B.为了再次澄清,需要查找和返回上述方法的代码将在完全不同的类/包中.

现在,Class.getMethods()只返回公共方法,因此不会做我想要的; Class.getDeclaredMethods()只返回当前类的方法.虽然我当然可以使用后者并且可以手动检查类层次结构来检查可见性规则,但是如果有更好的解决方案,我宁愿不这样做.我在这里错过了一些明显的东西吗?

java reflection

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

XStream:具有属性和文本节点的节点?

我想使用XStream将对象序列化为此表单的XML.

<node att="value">text</node>
Run Code Online (Sandbox Code Playgroud)

节点(文本)的值是序列化对象上的字段,以及att属性.如果没有为此对象编写转换器,这可能吗?

谢谢!

java xml xstream

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

您如何决定是使用库还是编写自己的实现

灵感来自这个无辜地开始但正在变成一场大火焰战争的问题.

假设您需要一种实用方法 - 相当简单,但不是单行.引用的问题是如何重复X次字符串.您如何决定是使用第三方实施还是自己编写?

第三方方法的明显缺点是您正在为代码添加依赖项.但是如果你自己编写,你需要对它进行编码,测试它,(也许)对它进行分析,这样你最终可能会花费更多的时间.

我知道决定本身是主观的,但你用来达到它的标准不应该是.

那么,您使用什么标准来决定何时编写自己的代码?

coding-style

17
推荐指数
3
解决办法
4573
查看次数

找到不兼容的类型:必需:注释中的默认枚举

[javac] C:\ws\galileo\test\Cacheable.java:13: incompatible types
[javac] found   : com.io.CacheType
[javac] required: com.io.CacheType
[javac]  public CacheType id() default CacheType.COMMON;
Run Code Online (Sandbox Code Playgroud)

我真的不懂这个.我有一个项目,我自定义为Spring构建一个缓存拦截器.它只是通过缓存名称来指向EhCache并使用aop-autoproxy来加载CacheableAspect(这是我的缓存拦截器).现在,当我在注释中使用默认值时,ANT会在下面给出编译器错误.我尝试更新到最新的JDK(我现在在1.6 16)并在ant脚本中设置源/目标级别但没有成功.当我删除默认值并强制所有区域指定一个值时,它会在ant中编译.

它总是在Eclipse中工作,我的单元测试与之前的默认值完美匹配.

是什么赋予了?我尝试构建一个项目(没有弹簧),简单地用ant回显配置,并在ant fine(和eclipse)中编译.

告诉我可能它可能是春天自动代理的某种方式?但那么为什么编译器不会给我生成的类型名称?GRRRR.有什么想法吗?

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.io.CacheType;

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.METHOD}) 
public @interface Cacheable {
 public CacheType value() default Cachetype.COMMON;
}

public enum CacheType {

 COMMON("common"),
 PERSISTENT("persistent";

 private String cache;

 CacheType(String cache) {
  this.cache = cache;
 }

 public String cache() {
  return this.cache;
 }
}
Run Code Online (Sandbox Code Playgroud)

java ant aop spring annotations

12
推荐指数
1
解决办法
6519
查看次数

@Cache注释使用错误

我添加了以下注释以启用我的EJB3实体之一的缓存,以使用ehCache测试缓存,其中我使用Hibernate作为持久性提供程序:

....
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Table(name = "F")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
@NamedQueries({ @NamedQuery(name = "F.findAll", query = "SELECT f FROM F f")})
public class F implements Serializable {
   .....
}
Run Code Online (Sandbox Code Playgroud)

我在persistence.xml中添加了以下内容:

<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我收到以下错误:

/persistence/F.class):警告:无法在类型'org.hibernate.annotations.Cache'中找到注释方法'usage()':org.hibernate.annotations.Cache的类文件未找到编译器中发生异常(1.6.0_16).在检查Bug Parade重复项后,请在Java Developer Connection(http://java.sun.com/webapps/bugreport)上提交一个错误.在报告中包含您的计划和以下诊断.谢谢.com.sun.tools.javac.code.Symbol $ CompletionFailure:未找到org.hibernate.annotations.CacheConcurrencyStrategy的类文件

任何人都可以帮助我,让我知道我目前需要做什么或做错了什么?

caching hibernate ehcache ejb-3.0 java-ee-5

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

通过服务API公开Hibernate标准

这更像是一个设计而不是实现问题,而且它会很长,所以请耐心等待.最好用一个例子来解释:

假设我有一个名为Product的业务实体,其中包含许多属性(名称,价格,供应商等).

它由接口(Product)和实现(ProductImpl,在Hibernate中映射)以及基本CRUD服务接口(ProductService)和实现(ProductServiceImpl)表示.
ProductProductService作为API公开,它们的实现不是.

我想向ProductService添加一个List findProducts(QueryCriteria criteria)方法,该方法将返回满足给定条件的产品列表.要求是:

  1. 通过直接产品属性查询(例如product.price gt 50.0)
  2. 按关联查询(例如product.vendor.name = "Oracle")
  3. 排序结果(例如order by product.vendor.name desc, product.price asc")
  4. 应用其他过滤器.与API客户端指定的上述3个项目不同,服务可以基于客户端的身份应用其他过滤器(例如,调用此方法的客户端可能仅限于查看由给定供应商制造的产品).此类过滤器优先于客户端指定的任何条件(例如,如果过滤器设置为product.vendor.name = "Microsoft",则上面的(2)中的查询应生成空结果集.

因此,问题是这种方法使用的QueryCriteria接口应该是什么样的?我可以想到3个解决方案,我不喜欢其中任何一个:

  • 允许客户端直接指定HQL(以"where"子句开头).这是最直接的解决方案,但也是最有问题的安全方面.即使假设过滤器(上面的#4)足够简单,可以通过Hibernate的会话过滤器实现,HQL仍然需要解析 - 至少 - 确保将查询参数指定为参数而不是内联.
  • 使用精简包装的Hibernate的DetachedCriteria代替QueryCriteria."精简包装"因为不能允许客户端直接创建DetachedCriteria,因为无法控制为其创建的映射实体.此外,这不像HQL那样灵活,因为某些查询不容易(或根本没有)通过Criteria API表达.与HQL方法一样,过滤器(上面的#4)将仅限于Hibernate会话过滤器.
  • 编写我自己的QueryCriteria接口/实现,它将在幕后形成DetachedCriteria或HQL.虽然可能是最灵活的解决方案,但这必须复制来自Criteria API的大量代码,这似乎不太理想.

任何关于上述方法的有效性的评论或 - 手指交叉 …

java hibernate

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

流畅的NHibernate映射

我是NHibernate和Fluent NHibernate的新手.

假设我有以下情况

Table Activities (uniquidentier ID, varchar ActivityName)
Table ActivityParameters(uniqueidentifier ID, varchar ParameterName,
 varbinary(8000) ParameterValue)
Run Code Online (Sandbox Code Playgroud)

和下面的课程

public static Acivity
{
     .......
     public virtual Guid Id {get; private set;}      
     public virtual string ActivityName {get; private set;}
     public virtual IDictionary<string, object> ActivityParameters {get; private set;}
}
Run Code Online (Sandbox Code Playgroud)

我该如何编写类图?更具体地说,我如何编写活动参数​​的映射?

.net fluent-nhibernate

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

如何使用HQL将'null'放入列中?

如何构建有效的HQL字符串,相当于

UPDATE表SET字段= null WHERE ....

java hibernate hql

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

如何处理@Component和@Repository/@Service注释之间的区别是什么?

今天我在Spring 3.0中偶然发现了一个相当奇怪的问题:

有一个抽象类A及其具体实现A_Impl.A_Impl注释为@RepositorySpring并由Spring自动扫描(<context:component-scan>并且<context:annotation-config/>都在上下文中声明).A并且A_Impl部署在单独的JAR中(不确定是否重要).一切正常.

现在,我正在审查那些代码,并且@Repository在语义上看起来不太合适(有问题的类与持久性无关)所以 - 在我的无限智慧中 - 我决定将其更改为更通用@Component.毋庸置疑,一切都爆发了,让我看起来像一个完全白痴.错误(在Spring上下文初始化期间发生)是Spring的ClassPathResource.getInputStream()方法抱怨A类不存在(它是,我手动检查;加上常规类加载器发现它很好)

没有其他改变.如果我换@Component@Repository语境初始化,如果我换他们回到它不会出现上述错误.Spring文档声称没有差别之间@Component以及@Repository这显然是一个该死的谎言:-)所以我想-什么区别?

java spring dependency-injection

7
推荐指数
1
解决办法
6381
查看次数