如何让IntelliJ在一行上生成getter/setter,如下所示:
public String getAbc() { return abc; }
Run Code Online (Sandbox Code Playgroud)
代替
public String getAbc() {
return abc;
}
Run Code Online (Sandbox Code Playgroud)
??
给出以下方法:
public function setFoo($foo) {
$this->_foo = $foo;
return $this;
}
public function getFoo() {
return $this->_foo;
}
Run Code Online (Sandbox Code Playgroud)
假设,未来可能会更改为更复杂:
@covers注释怎么样?(我使用Netbeans 7)
这似乎是浪费时间,但我不介意IDE是否会自动生成这些测试方法.
(就像测试getter和setter一样 - 失败!).无论如何,如果他们失败了; 那些依赖它们的方法不会失败吗?
那么,代码覆盖怎么样?
我有一种情况需要覆盖属性的getter.
假设我们有:
public class MyBaseClass {
private var _name: String
public internal(set) var name: String {
get {
return self._name
}
set {
self._name = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
我猜,没什么特别的.
现在,如果我尝试覆盖派生类中的getter:
public class MyDerivedClass: MyBaseClass {
public var name: String {
get {
return "Derived - \(super.name)"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误:无法使用只读属性"name"覆盖mutable属性.
如果我尝试添加setter并覆盖它:
public class MyDerivedClass: MyBaseClass {
public internal(set) var name: String {
get {
return "Derived - \(super.name)"
}
set {
super.name = newValue
}
}
} …Run Code Online (Sandbox Code Playgroud) 几个月前我刚刚开始学习Python,我试图理解不同__get*__方法之间的差异:
__get__
__getattr__
__getattribute__
__getitem___
Run Code Online (Sandbox Code Playgroud)
他们的__del*__等价物:
__del__
__delattr__
__delete__
__delitem__
Run Code Online (Sandbox Code Playgroud)
这些有什么区别?我什么时候应该使用另一个?是否有一个特定的原因,为什么大多数__get*__方法都有__set*__等价物,但没有__setattribute__?
我想知道何时在我的类中使用get和set方法(getName,setName),classVariable.name = ""而不是简单? = classVariable.getName()
这是使用set和get方法的类的示例
public class ClassExampe {
String name;
String course;
public String getName ( )
{
return name;
}
public void setName (String studentName)
{
name = studentName;
}
public String getCourse ( )
{
return course;
}
public void setCourse (String studentCourse)
{
course = studentCourse;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
什么是自动生成的getter和setter看起来像以下属性值?
... in .h
@interface MyClass : NSObject {
@private
NSString *_value;
}
@property(retain) NSString *value;
... in .m
@synthesize value = _value;
Run Code Online (Sandbox Code Playgroud)
如果我改变属性怎么办?
@property(retain, readonly) NSString *value;
Run Code Online (Sandbox Code Playgroud)
特别是我对故事的原子部分感兴趣,加上保留,如果可能的话,详细的代码将更清楚地说明幕后发生了什么.
好吧,这真的让我烦恼,我开始认为这一切都取决于个人选择,而不是提高效率或编写更好的代码的特定方式:我应该还是不应该在PHP项目中使用getter/setter方法?到目前为止,我读过的答案相当矛盾,并不完全适合PHP,这不是一种编译语言.例如,在Stack Overflow上讨论这个问题(" 为什么要使用getter和setter?").关于为什么我应该在我的代码中使用它们有很多很好的理由,但是所有的儿童评论都提到了访问者是如何邪恶的并且应该避免,在几个更令人不安的评论之间穿插,提到它们应该完全避免,因为它"搞砸你的代码".
我得到的只是相互矛盾的答案,其中没有一个与解释的PHP环境相关.有人可以阐明为什么/为什么不在PHP中使用它们,以及它们的决定背后的理由?如果我们可以简单地将属性定义为私有或受保护并且无论如何:
封装吸气剂和定型器提供的是可笑的薄
...引自"sbi"(为什么要使用吸气剂和二传手?)
就个人而言,我仍然不知道如何:
Class Foo {
public $bar;
function setBarType($val) {
$this->bar = $val;
}
}
$fee = new Foo();
$fee->setBarType(42);
Run Code Online (Sandbox Code Playgroud)
优于此:
Class Foo {
public $bar;
}
$fee = new Foo();
$fee->bar = 42;
Run Code Online (Sandbox Code Playgroud) 我有以下ORM Symfony实体,只有属性:
<?php
namespace Evr\HomeBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="ev_article")
* @ORM\Entity
*/
class Article
{
/**
*
* @ORM\Column(name="article_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
*
* @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
* @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
*/
private $subcategory;
/**
*
* @ORM\Column(type="string",length=512)
*/
private $title;
/**
*
* @ORM\Column(type="text")
*/
private $content;
/**
*
* @ORM\Column(type="text")
*/
private $exclusive_content;
/**
*
* @ORM\Column(type="date")
*/
private $creation_date;
/**
*
* @ORM\Column(type="integer")
*/
private $views;
/**
*
* @ORM\Column(type="integer")
*/
private …Run Code Online (Sandbox Code Playgroud) (暂不回答你应该拥有它们的问题.)
我一直希望只使用函数重载为getter和setter提供相同的名称.
int rate() { return _rate; }
void rate(int value) { _rate = value; }
// instead of
int getRate() { return _rate; }
void setRate(int value) { _rate = value; }
// mainly because it allows me to write the much cleaner
total( period() * rate() );
// instead of
setTotal( getPeriod() * getRate() );
Run Code Online (Sandbox Code Playgroud)
当然我是对的,但我想知道图书馆作家是否有任何理由?
我看到了一个代码,其中getter和setter方法被声明为private.我试图找出它背后的逻辑,我真的很难理解为什么你会将它们声明为私有?这与我们试图通过吸气剂和制定者实现的完全相反.
getter-setter ×10
java ×3
accessor ×2
oop ×2
php ×2
annotations ×1
atomic ×1
c++ ×1
doctrine ×1
inheritance ×1
objective-c ×1
overriding ×1
phpunit ×1
properties ×1
python ×1
swift ×1
symfony ×1
unit-testing ×1