Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何强制使用对象的程序员使用值指定特定的属性名?_Java_Methods - Fatal编程技术网

Java如何强制使用对象的程序员使用值指定特定的属性名?

Java如何强制使用对象的程序员使用值指定特定的属性名?,java,methods,Java,Methods,我如何强制使用我的类的程序员实现具有值的特定命名属性,就像我们可以强制程序员实现接口或抽象方法一样 //DAO dao = new DAO(); //instansiate a transfer object Transfer trans = new Transfer(); //must set and name the propety "id" with a value to work trans.setProperty("id", "23"); //Transfer test = dao.

我如何强制使用我的类的程序员实现具有值的特定命名属性,就像我们可以强制程序员实现接口或抽象方法一样

//DAO dao = new DAO(); 
//instansiate a transfer object Transfer trans = new Transfer();
//must set and name the propety "id" with a value to work trans.setProperty("id", "23");
//Transfer test = dao.getDataByID("23");
//System.out.println(test.getProperty("id"));

不要提供默认构造函数。例如-

考虑以下类别:

class User{

 private String firstName;
 private String lastName;

 public User(String firstName, String lastName){
   this.firstName = firstName;
   this.lastName = lastName;
 }

}
在上面的示例中,通过不提供默认构造函数
User()
,使用用户类的程序员在创建用户对象时将被迫设置firstName和lastName

编辑-

为了解决程序员传递空值的情况,您可以检查该值并抛出异常来处理该值

// TODO code application logic here DAO dao = new DAO(); 
//instansiate a transfer object Transfer trans = new Transfer();
//must set and name the propety "id" with a value to work trans.setProperty("id", "23");
正如@hellboy的回答所述,让
Transfer()
的构造函数获取一个
对象(或
字符串
),并在构造函数中设置它:

public Transfer( Object id )
{
    this.setProperty( "id", id );
}

// or if the ID should be a string:
public Transfer( String id )
{
    this.setProperty( "id", id );
}

由于您的问题专门用
magic
标签标记

使用反射断言字段存在:

public static boolean hasField(Object instance, String fieldName) {
    try {
        instance.getClass().getField("");
        return true;
    } catch (NoSuchFieldException | SecurityException e) {
        return false;
    }
}
然后在代码中

if (!hasField(trans, "id")) {
    // throw an exception or whatever - your choice what to do
}

通过威胁他,如果他不遵守,他将不得不用Perl编写一辈子的代码!好吧,别开玩笑了:你用它干什么?您只能通过反射来访问它,这使它变得不容易,而且速度很慢,无法生成运行时代码。。。。。。通过强制他们实现一个接口。您是否可以展示一些代码,说明您的意思以及为什么需要实现它们it@clcto我不知道接口如何强制类中必须有一个给定的字段……我有一个Transfer对象,它有一个hashmap来保存这个对象的动态属性。我希望使用这个对象来实现id属性的程序员不要在属性中使用“implement”这个词。这令人困惑。您实现的是行为/方法,而不是属性/字段。调用
新用户(null,null)
与使用默认构造函数是一样的。您可以测试值并抛出和异常。我认为OP希望编译器检查值,这是不可能的。OP令人困惑。我想我应该在看到OPs解释后删除我的回答:)谢谢大家强迫程序员通过构造函数设置id属性。然后在setProperty方法中检查id属性是否在hashmap中