标签: setter

Getter/Setter或其他地方的数据验证?

我想知道在gettersetter或代码中的其他地方进行验证是否是个好主意.

优化加速代码方面,这可能会让您感到惊讶,我认为您不应该在getter和setter中进行验证,而应该在您更新文件或数据库的代码中进行验证.我错了吗?

verification getter setter optimization

10
推荐指数
1
解决办法
2086
查看次数

在解组对象时,JAXB不会调用setter

我正在使用JAXB 2.0 JDK 6来将XML实例解组为POJO.

为了添加一些自定义验证,我已经将一个验证调用插入到属性的setter中,尽管它是私有的,但似乎unmarshaller不会调用setter但直接修改私有字段.

对我来说,每个unmarshall调用都会针对此特定字段进行自定义验证,这一点至关重要.

我该怎么办?

码:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "LegalParams", propOrder = {
    "value"
})
public class LegalParams {

    private static final Logger LOG = Logger.getLogger(LegalParams.class);

    @XmlTransient
    private LegalParamsValidator legalParamValidator;

    public LegalParams() {

        try {
            WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
            LegalParamsFactory legalParamsFactory = (LegalParamsFactory) webApplicationContext.getBean("legalParamsFactory");
            HttpSession httpSession = SessionHolder.getInstance().get();
            legalParamValidator = legalParamsFactory.newLegalParamsValidator(httpSession);
        }
        catch (LegalParamsException lpe) {
            LOG.warn("Validator related error occurred while attempting to construct a new instance of LegalParams");
            throw new IllegalStateException("LegalParams creation failure", lpe);
        }
        catch (Exception …
Run Code Online (Sandbox Code Playgroud)

java setter jaxb customvalidator

9
推荐指数
1
解决办法
9186
查看次数

描述符'getter'需要'property'对象但是收到'function'

所以我在下面有一个Table对象的代码,它有一个fieldnames属性.

class Table(object):
    '''A CSV backed SQL table.'''
    @property
    def fieldnames(self):
        with open(self.filename) as f:
            return csv.DictReader(f).fieldnames

    @property.setter
    def fieldnames(self, fieldnames):
        with open(self.filename, 'w') as f:
            dr = csv.reader(f)
            dw = csv.DictWriter(f, fieldnames=fieldnames)
            dw.writerow(dict((field, field) for field in fieldnames))
            for row in self:
                dw.writerow(row)
Run Code Online (Sandbox Code Playgroud)

当我尝试导入文件时,我收到错误:

seas486:PennAppSuite ceasarbautista$ python
Python 2.7.1 (r271:86832, Jun 25 2011, 05:09:01) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import table …
Run Code Online (Sandbox Code Playgroud)

python setter properties decorator

9
推荐指数
1
解决办法
2887
查看次数

简单的Scala getter/setter覆盖

假设我们有一个带有'name'属性的类:

class SuperFoo(var name: String) 
Run Code Online (Sandbox Code Playgroud)

如果我希望覆盖它,例如在调用周围添加一些锁定:

class SubFoo(n: String) extends SuperFoo(n) {
  val lock = new ReentrantLock
  override def name(): String =
    {
      lock.lock
      try {
        super.name
      } finally {
        lock.unlock
      }
    }
  override def name_=(arg: String): Unit = {
    lock.lock
    try {
      super.name = arg
    } finally {
      lock.unlock
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

以上产生了编译错误:

super may be not be used on variable name 
Run Code Online (Sandbox Code Playgroud)

任何想法如何正确实现这一点?(即覆盖getter和setter以在它们周围添加锁定).谢谢!

getter setter inheritance scala properties

9
推荐指数
1
解决办法
3031
查看次数

protobuf-net - 从.proto生成的类 - 重复字段应该是只读而没有setter吗?

我对此完全感到困惑.我环顾四周,似乎找不到直接的答案.我有一个.proto文件,我的项目(全部是java)用来创建一些消息.

有一个重复的信息字段.这是我们创建的类型.当我使用protogen生成C#类时,此字段以只读方式显示,并且没有setter.

没有这个参数我无法完全构建消息.所以我的问题是.是否应该像这样生成重复字段,我应该以其他方式访问此只读列表?或者这是生成器中的错误?

生成的代码:

private readonly global::System.Collections.Generic.List<StringMapEntry> _factoryProperty = new global::System.Collections.Generic.List<StringMapEntry>();
[global::ProtoBuf.ProtoMember(2, Name=@"factoryProperty", DataFormat = global::ProtoBuf.DataFormat.Default)]
public global::System.Collections.Generic.List<StringMapEntry> factoryProperty
{
  get { return _factoryProperty; }
}
Run Code Online (Sandbox Code Playgroud)

Proto文件部分:

repeated StringMapEntry factoryProperty = 2;
Run Code Online (Sandbox Code Playgroud)

我可能只是遗漏了一些非常明显的东西.谢谢你的帮助!

c# setter readonly protobuf-net protogen

9
推荐指数
1
解决办法
3239
查看次数

从java中的另一个线程访问线程的变量

我试图在java中的另一个线程中访问和修改线程的变量,我真的不知道如何做到这一点.

例如:

Runnable r1 = new Runnable() {
    int value = 10;
    public void run() {
        // random stuff
    }
}
Runnable r2 = new Runnable() {
   public void run() {
        // of course the bellow line will not work
        r1.value--; // I want here to be able to decrement the variable "value" of r1
    }
}
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
Run Code Online (Sandbox Code Playgroud)

谢谢你,如果你有任何想法!

有没有办法在java中为线程创建一个getter和setter?

编辑:答案很好,但我不清楚我的问题,我会尝试提出一个更好的问题

java setter multithreading decrement

9
推荐指数
2
解决办法
3万
查看次数

一个类里面的JS getter和setter?

我想在JS中创建一个使用本机getter和setter的类.我知道我可以为对象创建getter/setter,如下所示:

var obj = {
    get value(){
        return this._value;
    },
    set value(val){
        this._value = val;
    }
}
Run Code Online (Sandbox Code Playgroud)

我也知道我可以this.__defineGetter__在一个类/函数中使用,但是MDN说使用__defineGetter__()等是不合适的.

是否有更好的方法将getter和setter添加到js类中:

function class(){
};

class.prototype = {
   get value(){
        //....

}
Run Code Online (Sandbox Code Playgroud)

javascript getter setter getter-setter

9
推荐指数
3
解决办法
9083
查看次数

Swift:CoreData NSManagedObject的自定义设置器

如何NSManagedObject在Swift中实现自定义setter .我需要在设置NSMangedObjectProperty 之前完成任务.

setter core-data ios swift

9
推荐指数
2
解决办法
4118
查看次数

何时使用JavaFX属性setter和getter,而不是直接使用该属性

我熟悉Java,但刚刚开始学习JavaFX,并专门了解JavaFX属性.我理解Oracle的以下示例中显示的基本设计模式:

package propertydemo;

import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;

class Bill {

    // Define a variable to store the property
    private DoubleProperty amountDue = new SimpleDoubleProperty();

    // Define a getter for the property's value
    public final double getAmountDue(){return amountDue.get();}

    // Define a setter for the property's value
    public final void setAmountDue(double value){amountDue.set(value);}

     // Define a getter for the property itself
    public DoubleProperty amountDueProperty() {return amountDue;}

}
Run Code Online (Sandbox Code Playgroud)

我不明白的是何时/为什么我会使用getter和setter方法,而不是直接使用Property?

我在想的是你可能想要一些getter和/或setter中的自定义代码,它们可以对数据进行一些操作前/操作/验证,但是如果你创建一个自定义的getter和/或setter,你会得到不同的结果那么,取决于你是否直接使用getter/setter或属性,对我来说,这看起来很危险.

如果getter/setter只是调用Property的get和set方法,那么为什么要使用它们呢?

任何有关这方面的见解将不胜感激.

java getter setter javafx properties

9
推荐指数
1
解决办法
4876
查看次数

字段getter/setter与基类中的表达式树

继例子这篇文章它的后续问题,我试图创建一个使用编译表达式场getter/setter方法.

getter工作得很好,但是我被困在了setter中,因为我需要setter来分配任何类型的字段.

在这里我的setter-action builder:

public static Action<T1, T2> GetFieldSetter<T1, T2>(this FieldInfo fieldInfo) {
  if (typeof(T1) != fieldInfo.DeclaringType && !typeof(T1).IsSubclassOf(fieldInfo.DeclaringType)) {
    throw new ArgumentException();
  }
  ParameterExpression targetExp = Expression.Parameter(typeof(T1), "target");
  ParameterExpression valueExp = Expression.Parameter(typeof(T2), "value");
  //
  // Expression.Property can be used here as well
  MemberExpression fieldExp = Expression.Field(targetExp, fieldInfo);
  BinaryExpression assignExp = Expression.Assign(fieldExp, valueExp);
  //
  return Expression.Lambda<Action<T1, T2>> (assignExp, targetExp, valueExp).Compile();
}
Run Code Online (Sandbox Code Playgroud)

现在,我将通用setter存储到缓存列表中(当然,每次构建setter都是性能杀手),我将它们转换为简单的"对象":

 // initialization of the setters dictionary
 Dictionary<string, object> setters = new Dictionary(string, object)();
 Dictionary<string, …
Run Code Online (Sandbox Code Playgroud)

c# reflection setter expression-trees fieldinfo

8
推荐指数
1
解决办法
779
查看次数