java怎样进行非静态引用_java – 如何解决“无法对非静态字段或方法进行静态引用”?...

我似乎无法找到我在静态方法中使用非静态引用的位置,代码是:

public class Item {

public static final Map ITEM_STATUSES = new HashMap();

static {

ITEM_STATUSES.put(STATUS_NEW, "New");

}

public static String getItemStatusFromName(final String p_itemStatusName) {

Iterator statusIterator = Item.ITEM_STATUSES.entrySet().iterator();

while (statusIterator.hasNext()) {

Entry statusEntry = (Entry)statusIterator.next();

if (((String)statusEntry.getValue()).equals(p_itemStatusName)) {

return (String)statusEntry.getKey();

}

}

return "";

}

}

而在另一个班级

private void getName(){

String itemStatus = Item.getItemStatusFromName(p_itemStatusName);

}

编译器说:无法从类型Item中对非静态方法getItemStatusFromName(String)进行静态引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java反射可以用来访问类的私有属性和方法,以及动态创建对象和调用方法。对于内部类的反射使用,需要使用getDeclaredClasses()方法获取类的内部类信息,返回的是一个数组,可以通过遍历数组获取内部类的信息。 对于静态内部类,可以通过类名直接访问,也可以通过反射获取其Class对象。对于静态内部类,需要先创建外部类对象,再通过外部类对象创建内部类对象,或者通过反射获取其Class对象。对于匿名内部类,需要通过反射获取其父类或接口的Class对象,再通过newInstance()方法创建对象。 下面是一个示例代码: ```java public class OuterClass { private String outerField; public void outerMethod() { System.out.println("Outer method"); } public static class StaticInnerClass { private String staticInnerField; public void staticInnerMethod() { System.out.println("Static inner method"); } } public class InnerClass { private String innerField; public void innerMethod() { System.out.println("Inner method"); } } public static void main(String[] args) { // 获取所有内部类信息 Class<?>[] declaredClasses = OuterClass.class.getDeclaredClasses(); for (Class<?> clazz : declaredClasses) { System.out.println(clazz.getName()); } try { // 访问静态内部类的方法 StaticInnerClass staticInner = new StaticInnerClass(); staticInner.staticInnerMethod(); Class<?> staticInnerClass = Class.forName("OuterClass$StaticInnerClass"); Object staticInnerObj = staticInnerClass.newInstance(); Method staticInnerMethod = staticInnerClass.getDeclaredMethod("staticInnerMethod"); staticInnerMethod.invoke(staticInnerObj); // 访问静态内部类的方法 OuterClass outer = new OuterClass(); InnerClass inner = outer.new InnerClass(); inner.innerMethod(); Class<?> innerClass = Class.forName("OuterClass$InnerClass"); Constructor<?> innerConstructor = innerClass.getDeclaredConstructor(OuterClass.class); Object innerObj = innerConstructor.newInstance(outer); Method innerMethod = innerClass.getDeclaredMethod("innerMethod"); innerMethod.invoke(innerObj); // 访问匿名内部类的字段方法 Runnable runnable = new Runnable() { private String anonymousField; @Override public void run() { System.out.println("Anonymous run"); } }; Class<?> anonymousClass = runnable.getClass(); Field anonymousField = anonymousClass.getDeclaredField("anonymousField"); anonymousField.setAccessible(true); anonymousField.set(runnable, "anonymous value"); Method anonymousMethod = anonymousClass.getDeclaredMethod("run"); anonymousMethod.invoke(runnable); } catch (Exception e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值