相关疑难解决方法(0)

GetDeclaredMethods(java)中的问题

我的代码中有一个小问题

我有2节课

public class A {

     public A foo(int a) {return new A();}
}

public class B extends A{

     public B foo(int x){ return new B();}
}
Run Code Online (Sandbox Code Playgroud)

现在在我的代码中我想只打印在B类中声明的方法

通过这种方式

B b = new B();

Method[] m = b.getClass().getDeclaredMethods();

for (int i = 0; i < m.length; i++) {

System.out.print(m[i].getName());   
}
Run Code Online (Sandbox Code Playgroud)

为什么输出

foo

foo
Run Code Online (Sandbox Code Playgroud)

为什么GetDeclaredMethods在A类中也找到了foo?我该怎么办呢?

谢谢

java reflection inheritance

8
推荐指数
2
解决办法
6080
查看次数

关于接口重写方法的思考

我有以下代码,通用ITest接口由非通用ITestDouble接口扩展.该op方法被覆盖ITestDouble.

当我尝试列出所有方法时ITestDouble,我得到op两次.如何验证它们实际上是相同的方法?

public class Test {

    public static void main(String[] args) throws NoSuchMethodException {
        for (Method m : ITestDouble.class.getMethods()) {
            System.out.println(m.getDeclaringClass() + ": " + m + "(bridge: " + m.isBridge() + ")");
        }
    }

    public interface ITestDouble extends ITest<Double> {
        @Override
        public int op(Double value);

        @Override
        public void other();
    }

    public interface ITest<T extends Number> {
        public int op(T value);

        public void other();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

interface …
Run Code Online (Sandbox Code Playgroud)

java generics reflection overriding

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

为什么 Lombok 在覆盖通用 getter 时会生成一个额外的 Getter?

我有一个定义 id 字段(和其他字段,但简化)的接口,它使用 Java 的泛型。

我正在使用 Lombok 为实现此功能的类生成 Getter 和 Builder。

IdType getId()在界面,Lombok的正在生成两者Object getId(),和UUID getId()。这两种方法在通过反射调用时都可以工作,但它非常奇怪,并且弄乱了一些假设一个类不会有多个具有相同名称和不同返回类型的方法的代码。

(I <3 反射)

这是显示此行为的单元测试。我的龙目岛错了吗?我需要申请另一个注释吗?我只是耸耸肩并编写我的代码来让所有吸气剂检查并避免它吗?

Java 8,Lombok 1.18.16,目前是最新的。

public class LombokGeneratesDuplicateMethodsTest {
    interface WithId<IdType> {
        IdType getId();
    }

    @Getter
    @Builder
    static class Record implements WithId<UUID> {
        private UUID id;
        private String name;
    }

    @Test
    public void testStuff() throws Exception {
        Collection<Method> getIds = Arrays.stream(Record.class.getDeclaredMethods())
                .filter(m -> Modifier.isPublic(m.getModifiers()))
                .filter(m -> !Modifier.isStatic(m.getModifiers()))
                .filter(m -> !Void.TYPE.equals(m.getReturnType()))
                .filter(m -> m.getParameterTypes().length == 0)
                .filter(m -> …
Run Code Online (Sandbox Code Playgroud)

java generics lombok

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

标签 统计

java ×3

generics ×2

reflection ×2

inheritance ×1

lombok ×1

overriding ×1