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

标签 java generics

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

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

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

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/

相关文章:

Java 全局整型

java - JLS 6/7 的哪些更改导致以下带有集合和泛型的未经检查的代码在 Java 7 中工作?

generics - 在 kotlin 中创建一个具有 Comparable<T> 类型数组的泛型类?

java - 为什么我不能在java中处理参数?

C# 确定列表中的重复项

java - 将网站从 tomcat 指向 Apache 服务器

java - 我应该在 Android tiapp.xml 中的什么地方添加 <supports-screens>

java - MVC模式;我的模型类需要用户输入,但我知道它不应该询问用户或 Controller

java - SQL查询Android Where子句的问题

ios - 使用 swift 转换具有泛型参数的结构