gpt4 book ai didi

java - 强制使用多个相同类型的参数参数的静态方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:20 25 4
gpt4 key购买 nike

我需要一个通用的静态方法来接受相同类型(类)的对象来反身比较它们。 (编译时检查)

例如,如果第一个参数是字符串;第二个也是字符串。

我认为下面会起作用;但没有。我可以将任何两个不同的对象传递到下面 :(。

public static <T> void compareAndSetNonEditableFields(T current, T old){}

即使是下面的也不起作用。请帮忙。

public static <T> void compareAndSetNonEditableFields(Class<T> type, T current, T old){}

UPDATE_1


团队感谢您的帮助,但下面给出了解决方案ClassName.<String>是可选的,如果我使用它,那么只有我会知道我设置错了;但是大部分开发者都不知道这个用法(我现在也是新学的,谢谢);他们可以直接调用这个静态 API :(

UPDATE_2


即使我采用非静态方式;我无法阻止使用子类而不是父类(super class)。如下图。没有编译问题。而且我不知道它是否有效。考虑到这一点,相对而言,我现在会关注@Ingo 的回答。

public class HandlingNonEditableFields<T> {

public void compareAndSetNonEditableFields(T currentObject, T oldObject) {
}

public static void main(String[] args) {
SuperClass obj1 = new SuperClass();
SubClass obj2 = new SubClass();
new HandlingNonEditableFields<SuperClass>().
compareAndSetNonEditableFields(obj1, obj2);
}
}

UPDATE_3


非静态方法方式:

我试图通过添加 Class<T> 来强制它作为我的论点之一。但即使这样也行不通。

    public void compareAndSetNonEditableFields(Class<T> type2ForceT, T currentObject, T oldObject) {       }

使用Class<? extends MainTestClass> 抛出异常在方法声明处。否则我必须在方法被调用者处显式转换。

结论


在编译时;无法强制将相同类级别的参数传递给声明为 Static 和 Non-Static 的泛型方法。

最佳答案

您需要按以下方式调用您的方法:

ClassName.<String>compareAndSetNonEditableFields("test", "test2"); // ok

ClassName.<String>compareAndSetNonEditableFields("test", 12); // compile time error

关于java - 强制使用多个相同类型的参数参数的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20263481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com