用公共构造函数java声明私有静态嵌套类?

iqxoj9l9  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(427)

如何使用公共构造函数创建静态私有内部类的示例?

public class outerClass<E> {
private static class innerClass<E> {
    E value;

    public innerClass(E e) {
        value = e;
    }
}}

我已经试过了,它给出了一个错误,即out包不存在

outerClass<Integer> out = new outerClass<Integer>();
out.innerClass<Integer> = new out.innerClass<Integer>(1);

我试过这个,但它给出了一个错误,即内部类是私有的,无法访问。

outerClass<Integer>.innerClass<Integer> = new 
outerClass<Integer>.innerClass<Integer>(1)
zengzsys

zengzsys1#

new out.innerClass<Integer>(1); 但这毫无意义。 innerClass 已声明 static ,这意味着内部类与 outerClass ; 它只是出于名称空间的目的而位于其中(也许,外部和内部都可以访问它) private 但这就是它的终点。所以, out ,作为 outerClass ,没必要去那里。 new outerClass<Integer>.innerClass<Integer>(1) 这也没有任何意义——这里提到outerclass只是为了名称空间:告诉java你指的是什么类。因此 <Integer> 那是没有意义的。

那我怎么办?

new outerClass.innerClass<Integer>(1);
rjjhvcjd

rjjhvcjd2#

你没有提到限制,所以。。。。

反思救人!

package com.example;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class ReflectionTest {

    public static class OuterClass<E> {
        private static class InnerClass<E> {
            E value;

            public InnerClass(E e) {
                value = e;
            }
        }
    }

    @Test
    public void should_instantiate_private_static_inner_class_w_reflection()
            throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException,
                   IllegalAccessException, InvocationTargetException, InstantiationException {

        Class<?> innerCls = Class.forName("com.example.ReflectionTest$OuterClass$InnerClass");
        Constructor<?> ctor = innerCls.getConstructor(Object.class);

        Object instance = ctor.newInstance(10);
        Field valueField = innerCls.getDeclaredField("value");
        valueField.setAccessible(true);
        Object value = valueField.get(instance);

        assertEquals(value, 10);
    }
}

相关问题