相关疑难解决方法(0)

实例化内部类

我正在研究过度散列hashCode和equals方法的示例问题,但是得到一个错误:" 没有可以访问CustomHashCodeExample类型的封闭实例.必须使用CustomHashCodeExample类型的封闭实例来限定分配(例如,xnew A(),其中x是一个实例of CustomHashCodeExample). "我写了一个内部类HashPerson,当我试图在另一个名为testHashCodeOverride()的方法中实例化这个内部类时,我收到了这个错误.

public static void testHashCodeOverride(){   
    System.out.println("\nTest HashCode Override Method");
    System.out.println("==================================\n");

    HashPerson william = new HashPerson("willy");
    HashPerson bill = new HashPerson("willy");          
}
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,即使我没有看到静态内部类或外部类的实例化,困惑:(

public class HashCodeExample {

    public static void testHashCodeOverride() {

        HashPerson william = new HashPerson("Willy");
        HashPerson bill = new HashPerson("Willy");
        System.out.println("Hash code for william  = " + william.hashCode());
        System.out.println("Hash code for bill     = " + bill.hashCode());

        HashMap table = new HashMap();
        table.put(william, "Silly");

        if (table.containsKey(william)) {
            System.out.println(table.get(william));
        } else {
            System.out.println("Key " + william + …
Run Code Online (Sandbox Code Playgroud)

java inner-classes

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

是否可以使用Java Reflection创建嵌套类的实例?

代码示例:

public class Foo
{
    public class Bar
    {
         public void printMesg(String body)
         {
             System.out.println(body);
         }
    }
    public static void main(String[] args)
    {
         // Creating new instance of 'Bar' using Class.forname - how?
    }        
}
Run Code Online (Sandbox Code Playgroud)

是否可以创建类Bar的新实例给它的名字?我试着用:

Class c = Class.forName("Foo$Bar")
Run Code Online (Sandbox Code Playgroud)

它找到了类,但是当我使用c.newInstance()时它会抛出InstantiationException.

java reflection inner-classes

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

在Java中,当我不在内部类时,如何访问外部类?

如果我有一个内部类的实例,我如何从不在内部类中的代码访问外部?我知道在内部类中,我可以Outer.this用来获取外部类,但我找不到任何外部方法来获取它.

例如:

public class Outer {
  public static void foo(Inner inner) {
    //Question: How could I write the following line without
    //  having to create the getOuter() method?
    System.out.println("The outer class is: " + inner.getOuter());
  }
  public class Inner {
    public Outer getOuter() { return Outer.this; }
  }
}
Run Code Online (Sandbox Code Playgroud)

java syntax nested

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

使用java反射实例化私有内部类

是否可以使用Java反射从另一个类实例化私有内部类.例如,如果我采用此代码

public class Main {
    public static void main(String[] args) {}
}

class OtherClass {
    private class Test {}
}
Run Code Online (Sandbox Code Playgroud)

是否可以从类main中的main方法实例化并获得对Test的访问权限.

java reflection private class inner-classes

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

How to get values of nested class attribute using reflection?

Currently I have classes with several nested classes inside is, like:

public class Foo {

  private Bar bar;

  //getter & setter

  public class Bar {

    private Abc abc;

    //getter & setter

    public class Abc {
      @RequiredParam
      private String property;

      //getter & setter
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

I am trying to get the value of the fields but I am having a hard time how to achieve this.

So far I have:

  public static boolean isValid(Object paramClazz) throws Exception {
    List<Class> classes …
Run Code Online (Sandbox Code Playgroud)

java reflection

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

内部类中的公共无参数构造函数的NoSuchMethodException

我在内部类中定义了一个公共无参构造函数,并且我的代码NoSuchMethoException在我调用时不断抛出getConstructor().

我正在使用以下方法调用外部类中的问题方法:

addListeners( info_boxes, InfoBoxListener.class.getName() );
Run Code Online (Sandbox Code Playgroud)

我的内心阶级:

public class InfoBoxListener implements View.OnClickListener
{
    public InfoBoxListener()
    {
        //Why isn't this constructor being found?
    }

    @Override
    public void onClick(View view) 
    {
        //some code         
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出异常的方法:

private void addListeners( List<View> views, String class_name )
{   
        try 
        {
            Class<?> clazz = Class.forName( class_name );

            Constructor<?> ctor = clazz.getConstructor(); //EXCEPTION

            for ( View view : views )
            {
                Object object = ctor.newInstance();
                view.setOnClickListener( (View.OnClickListener) object );
            }

        } 
        catch (ClassNotFoundException …
Run Code Online (Sandbox Code Playgroud)

java android

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

Java - Class.forName,如何从类中获取字段

我正在尝试使用 Class.forName 从 android.os.Build 类获取字符串,但我收到错误 NoSuchFieldException。

这是我的代码:

public String getValue() {
    String field = "";
    try {
        Class b = Class.forName("android.os.Build");
        Class build = b.getClass();

        Field myField = build.getDeclaredField("UNKNOWN");
        field = myField.toString();

    } catch (ClassNotFoundException e) {
        e.printStackTrace();

    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    }
    return field;
}
Run Code Online (Sandbox Code Playgroud)

我想得到的字符串实际上是“SDK_INT”,它在 VERSION 中,但我想我会先尝试从主类中获取一个字段。这是包含 Version 类的 Build 类:

package android.os;

public class Build {
    public static final String UNKNOWN = "unknown";
    public static final String ID = null;
    public static final String DISPLAY …
Run Code Online (Sandbox Code Playgroud)

java reflection class

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

在运行时生成新的类实例失败

我遇到了java和泛型类的问题.
给出以下代码

public class A {
    public void n() { 
        System.out.println("In A"); 
    }
}

public class B extends A {
    @Override
    public void n() {
        System.out.println("In B");
        super.n();
    }
}

public class C {
    public A m_a;
    public <T extends A> C( Class<T> a ) {
        try {
            m_a = a.newInstance();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    public void print(){ m_a.n(); };
}
Run Code Online (Sandbox Code Playgroud)

我尝试实例化C类的对象,如下所示

C c = new C( B.class );
Run Code Online (Sandbox Code Playgroud)

但是得到以下错误:

java.lang.InstantiationException: testdbvsfile.Main$B
    at java.lang.Class.newInstance(Unknown Source)
    at testdbvsfile.Main$C.<init>(Main.java:63) …
Run Code Online (Sandbox Code Playgroud)

java generics

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

为什么我在这里得到java.lang.InstantiationException?

我正在学习Java中的反射,我写了一些测试代码:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test  {
    class Base {
        public Base() {}
        public void print(){
            System.out.println("base");
        }
    }

    class Derived extends Base {
        @Override
        public void print() {
            System.out.println("derived");
        }
    }

    public static void main(String args[])
    {
        try {
            Class.forName(Derived.class
                    .getTypeName())
                    .getSuperclass()
                    .getMethod("print", new Class[0])
                    .invoke(Base.class.newInstance());// line 41
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) { …
Run Code Online (Sandbox Code Playgroud)

java reflection

0
推荐指数
1
解决办法
3151
查看次数

标签 统计

java ×9

reflection ×5

inner-classes ×3

class ×2

android ×1

generics ×1

nested ×1

private ×1

syntax ×1