Tag: reflection

在使用URLClassLoader加载的类上可靠地查找注释

我有一个代码生成器,它使用URLClassLoader来加载指定路径上的类,扫描它们以获取注释,然后在字段/方法上使用Reflection,生成DTO。 它在测试应用程序中运行良好。 当我把它放入Maven MOJO时,我突然失去了在类上看到javax.persistence.Entity注释的能力。 它加载它们,它可以看到所有字段,但实体注释不再可见。 我假设这与Classpath问题有关 – 是吗? 测试应用程序(插件本身中的main()函数)或MOJO都不是扫描类所来自的项目的一部分。 但是一个有效,另一个没有。 我有一些调试代码在检查它时打印出类上的所有注释,而在非运行版本中它找不到任何注释。 我是如何调试问题/解决它的?

从字节码解析类名

是否有可能从类源代码中形成的字节码中挖掘出一个类名? 情况是这样的:我从某个地方远程获取一个类字节码,它来自哪里无关紧要。 要使用类加载器有效地加载该类,我需要具有类名…对吗?

Java:我的classOf和newArray怎么样?

在这里 ,我想知道如何正确实现Collection#toArray(T[] array) 。 我最烦恼的是array.getClass().getComponentType()是Class类型而不是Class 如我所料, Class 。 因此,我编写了这三个函数: @SuppressWarnings(“unchecked”) static Class classOf(T obj) { return (Class) obj.getClass(); } @SuppressWarnings(“unchecked”) static Class classOf(T[] array) { return (Class) array.getClass().getComponentType(); } @SuppressWarnings(“unchecked”) static T[] newArray(Class clazz, int size) { return (T[]) Array.newInstance(clazz, size); } 然后,我的toArray实现看起来像: public T[] toArray(T[] array) { int size = size(); if (array.length size) […]

在这种情况下,JVM或reflection的新实例是否有用

我之前发过一个问题,但没有明确的解决方案 如何防止JFrame关闭 。 所以我发布的SSCCE可能有助于更好地理解所面临的问题 package myApp; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.swing.JFrame; import App2.Applic2; public class MYApp { @SuppressWarnings({ “unchecked”, “rawtypes” }) public static void main(String arg[]){ JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setTitle(“Application frame 1”); f.setSize(200,200); f.setVisible(true); Class cls = Applic2.class; Object[] actuals = { new String[] { “” } }; Method m = […]

使用reflection在运行时推断javagenerics参数

我有一个带有以下签名的方法: // Converts a json string to a list of objects // Assumption: json is an array, and all items in the list are of the same type public List getListFromJson( String json, Class itemType, List defValue ) { final ArrayList list = new ArrayList(); for( JsonElement e : parser.parse(json).getAsJsonArray()) list.add( (T) ( Number.class.isAssignableFrom(itemType) ? […]

使用reflection更新JPA实体不起作用?

我有一个看起来像这样的实体:(我正在编写网页,所以我为任何错误道歉) @Entity public class Entity { @Id private Long id; private String field; // Insert getters and setters here… } 我尝试使用reflection来操纵它: Long id = 1; Entity entity = myDao.getEntity(id); entity.setField(“set directly”); Field[] fields = entity.getClass().getDeclaredFields(); for (Field f : fields) { if (f.getName().equals(“field”)) { f.setAccessible(true); f.set(entity, “set using reflection”); f.setAccessible(false); } } System.out.println(entity.getField()); 该程序打印“使用reflection设置”。 但是,在数据库中,使用reflection设置的值不会更新: […]

仅通过简单名称反思地找到一个类

我想知道是否有任何给定的函数允许我内省一个类而不必编写包含类的包。 例如,我想看一下Integer类的方法和超类,为了做到这一点,我必须指定类所在的包。 这将是“java.lang.Integer” 而不是这样做,我只想输入类名,以便显示类的信息。 就像这个“整数” 我怎么能让我的程序只检查类名,无论它位于何处?

动态添加对象的属性

嗨:在我们的应用程序中,我们从数据库中检索了一些数据,例如,表中有以下字符:id,name,age,address,email。 然后我们将根据客户获得一些这些特性。 如果客户端需要id,name,我们获取id名称,如果客户端需要id,name,age,我们会得到id,name,age。 现在我们要创建一个包装这些属性的类。 但是,我们并不确切地知道请求哪个字段。 String[] requestPro={“name”,”id”}; //this field is specified by client Map map=new HashMap(); Entity en=Entity.newInstance(); for(String p:requestPro){ map.put(p, BeanUtils.getProperty(en, p)); } 我可以在这里用Class替换地图吗?

使用reflection修改字符串的目的是什么?

我正在阅读一篇文章 ,说Java字符串不是完全不可变的。 但是,在文章的修改字符串的示例代码中,它调用string.toUpperCase()。toCharArray(),它返回一个新字符串。 那么,如果你调用toUpperCase(),那么通过更改字符串的过程的目的是什么? 这是代码: public static void toUpperCase(String orig) { try { Field stringValue = String.class.getDeclaredField(“value”); stringValue.setAccessible(true); stringValue.set(orig, orig.toUpperCase().toCharArray()); } catch (Exception ex){} } 另外,我注意到string.toUpperCase()本身不起作用。 它需要是string.toUpperCase()。toCharArray()。 是否有一个原因?

使用reflection比较字段值

我试图以通用方式比较两个不同对象的字段值。 我有一个函数(如下所示),它接收两个对象,然后获取字段,然后比较循环中的字段,如果它们不相同,则将字段添加到列表中 – 这是正确的方法吗? public void compareFields(Object qa, Object qa4) throws FieldsNotEqualException { Field[] qaFields = qa.getClass().getFields(); Field[] qa4Fields = qa4.getClass().getFields(); for(Field f:qaFields) { for(Field f4:qa4Fields) { if(f4.equals(f)) { found = true; break; } else { continue; } } } if(!found) { report.add(/*some_formatted_string*/) //some global list throw new FieldsNotEqualException(); } } 我在谷歌搜索,我看到C#有一个像PropertyInfo类 – Java有这样的东西吗? 还有,有没有办法像f.getFieldValue() […]