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中