让我们从一个简单的测试用例开始:
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) 有没有办法获得给定类可以访问(不一定是公共)的方法列表?有问题的代码将在一个完全不同的类中.
例:
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我想得到:
methodA1并methodA2从类AmethodA3当且仅当类B与包在同一个包中时AmethodA4永远不应该包括在结果中,因为它不能被类访问B.为了再次澄清,需要查找和返回上述方法的代码将在完全不同的类/包中.
现在,Class.getMethods()只返回公共方法,因此不会做我想要的; Class.getDeclaredMethods()只返回当前类的方法.虽然我当然可以使用后者并且可以手动检查类层次结构来检查可见性规则,但是如果有更好的解决方案,我宁愿不这样做.我在这里错过了一些明显的东西吗?
我想使用XStream将对象序列化为此表单的XML.
<node att="value">text</node>
Run Code Online (Sandbox Code Playgroud)
节点(文本)的值是序列化对象上的字段,以及att属性.如果没有为此对象编写转换器,这可能吗?
谢谢!
灵感来自这个无辜地开始但正在变成一场大火焰战争的问题.
假设您需要一种实用方法 - 相当简单,但不是单行.引用的问题是如何重复X次字符串.您如何决定是使用第三方实施还是自己编写?
第三方方法的明显缺点是您正在为代码添加依赖项.但是如果你自己编写,你需要对它进行编码,测试它,(也许)对它进行分析,这样你最终可能会花费更多的时间.
我知道决定本身是主观的,但你用来达到它的标准不应该是.
那么,您使用什么标准来决定何时编写自己的代码?
[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) 我添加了以下注释以启用我的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的类文件
任何人都可以帮助我,让我知道我目前需要做什么或做错了什么?
这更像是一个设计而不是实现问题,而且它会很长,所以请耐心等待.最好用一个例子来解释:
假设我有一个名为Product的业务实体,其中包含许多属性(名称,价格,供应商等).
它由接口(Product)和实现(ProductImpl,在Hibernate中映射)以及基本CRUD服务接口(ProductService)和实现(ProductServiceImpl)表示.
Product和ProductService作为API公开,它们的实现不是.
我想向ProductService添加一个List findProducts(QueryCriteria criteria)方法,该方法将返回满足给定条件的产品列表.要求是:
product.price gt 50.0)product.vendor.name = "Oracle")order by product.vendor.name desc, product.price asc")product.vendor.name = "Microsoft",则上面的(2)中的查询应生成空结果集. 因此,问题是这种方法使用的QueryCriteria接口应该是什么样的?我可以想到3个解决方案,我不喜欢其中任何一个:
任何关于上述方法的有效性的评论或 - 手指交叉 …
我是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)
我该如何编写类图?更具体地说,我如何编写活动参数的映射?
如何构建有效的HQL字符串,相当于
UPDATE表SET字段= null WHERE ....
今天我在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这显然是一个该死的谎言:-)所以我想-什么是区别?