我正在研究过度散列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) 代码示例:
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.
如果我有一个内部类的实例,我如何从不在内部类中的代码访问外部类?我知道在内部类中,我可以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反射从另一个类实例化私有内部类.例如,如果我采用此代码
public class Main {
public static void main(String[] args) {}
}
class OtherClass {
private class Test {}
}
Run Code Online (Sandbox Code Playgroud)
是否可以从类main中的main方法实例化并获得对Test的访问权限.
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) 我在内部类中定义了一个公共无参构造函数,并且我的代码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) 我正在尝试使用 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和泛型类的问题.
给出以下代码
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中的反射,我写了一些测试代码:
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)