可能重复:
为什么要使用getter和setter?
制作方法来访问类中的私有变量而不是将变量公开是否有任何优势?
例如,第二种情况比第一种情况好吗?
//Case 1
public class Shoe{
public int size;
}
//Case 2
public class Shoe{
private int size;
public int getSize(){
return size;
}
public void setSize(int sz){
size = sz;
}
}
Run Code Online (Sandbox Code Playgroud) 我如何使用set和get方法,为什么要使用它们?他们真的很有帮助吗?你也可以给我一些set和get方法的例子吗?
最近我搜索了一种初始化复杂对象的方法,而没有将大量参数传递给构造函数.我尝试使用构建器模式,但我不喜欢这样的事实,即如果我确实设置了所有需要的值,我无法在编译时检查.
当我使用构建器模式创建我的Complex对象时,创建更"类型安全",因为它更容易看到用于什么参数:
new ComplexBuilder()
.setFirst( "first" )
.setSecond( "second" )
.setThird( "third" )
...
.build();
Run Code Online (Sandbox Code Playgroud)
但现在我遇到了问题,我很容易错过一个重要的参数.我可以在build()方法中检查它,但这只是在运行时.如果我错过了什么,在编译时没有什么可以警告我.
现在我的想法是创建一个构建器,"提醒"我是否错过了所需的参数.我的第一次尝试看起来像这样:
public class Complex {
private String m_first;
private String m_second;
private String m_third;
private Complex() {}
public static class ComplexBuilder {
private Complex m_complex;
public ComplexBuilder() {
m_complex = new Complex();
}
public Builder2 setFirst( String first ) {
m_complex.m_first = first;
return new Builder2();
}
public class Builder2 {
private Builder2() {}
Builder3 setSecond( String …Run Code Online (Sandbox Code Playgroud) 我知道getter和setter是如何在JavaScript中工作的.我不明白为什么我们需要它们才能使用普通函数得到相同的结果?请考虑以下代码:
var person = {
firstName: 'Jimmy',
lastName: 'Smith',
get fullName() {
return this.firstName + ' ' + this.lastName;
}
}
console.log(person.fullName); // Jimmy Smith
Run Code Online (Sandbox Code Playgroud)
我们可以用一个函数轻松替换getter:
var person = {
firstName: 'Jimmy',
lastName: 'Smith',
fullName: function() {
return this.firstName + ' ' + this.lastName;
}
}
console.log(person.fullName()); // Jimmy Smith
Run Code Online (Sandbox Code Playgroud)
我没有看到写入getter和setter的重点.
我被教导要经常使用吸气剂和固定剂.但是,我不知道这些方法的优缺点,因为通过实现它们,我们暴露数据并隐藏它.
我对此有点困惑.任何人都可以就我们使用吸气剂/定位器的原因给出一些正确的建议,以及它们的优点是什么?
请原谅长度,但这里有两个程序,两者完全相同,但有一个有一个没有setter,getter和构造函数.
我以前参加了一个基础的C++课程,并且不记得其中的任何一个,目前我没有看到它们的重点,如果有人能用lamen的话解释它们,我会非常感激它.当他们似乎只是空间浪费让我的代码看起来更长,但老师说他们很重要(到目前为止就是这样).
提前致谢!现在这里是代码:Mileage.java:
package gasMileage;
import java.util.Scanner; //program uses class Scanner
public class Mileage
{
public int restart;
public double miles, gallons, totalMiles, totalGallons, milesPerGallon;
public Mileage(int newRestart, double newMiles, double newGallons,
double newTotalMiles, double newTotalGallons, double newMilesPerGallon)
{
setRestart(newRestart);
setMiles(newMiles);
setGallons(newGallons);
setTotalMiles(newTotalMiles);
setTotalGallons(newTotalGallons);
setMilesPerGallon(newMilesPerGallon);
}
public void setRestart(int newRestart)
{
restart = newRestart;
}
public int getRestart()
{
return restart;
}
public void setMiles(double newMiles)
{
miles = newMiles;
}
public double getMiles()
{
return miles;
}
public void …Run Code Online (Sandbox Code Playgroud) 简单地阅读上面的文章我发现getter和setter是糟糕的OO设计,应该避免它们反对Encapsulation和Data Hiding.在这种情况下,如何在创建对象时避免它,以及如何将对象模型对象考虑在内.
如果需要吸气剂或固定剂,可以使用其他替代品吗?
谢谢.
在我多年的编程中,我经常创建一些类,只需将一些变量与setter和getter组合在一起.我已经看到这些类型的对象被称为值对象,域对象或模型对象,具体取决于它们使用它们的上下文.通用用法的最合适术语似乎是数据传输对象(DTO).这描述了仅包含访问器和增变器的POJO.
我刚刚编写了一个这样的对象,其中包含用于在图表上设置主题参数的大约50个字段.现在我想知道如果不是生成一百个getter和setter,我应该将这些字段声明为public.这样做违背了我编程本能告诉我的一切,但我不能否认它会大大增加我的代码的易读性并减少类中的样板代码量.
我可以看到不使用公共字段的唯一原因是我需要对这些字段执行任何类型的验证.如果我们假设类型验证足以满足我的目的,那么在这种情况下使用公共字段是否可以接受面向对象设计?公共DTO在大批量操作中表现更好吗?
我在很多地方都读过"吸气鬼和恶魔都是邪恶的".我理解为什么这样.但我不知道如何完全避免它们.Say Item是一个包含项目名称,数量,价格等信息的类......而ItemList是一个类,它有一个Items列表.要找到总计:
int grandTotal()
{
int total = 0;
for (Item item: itemList)
total += item.getPrice();
return total;
}
在上面的例子中,如何避免getPrice()?Item类提供了getName,setName等....
我该如何避免它们?
我想知道何时在我的类中使用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)
谢谢
java ×8
methods ×3
oop ×3
accessor ×1
c# ×1
class ×1
coding-style ×1
constructor ×1
getter ×1
javascript ×1
ooad ×1
private ×1
properties ×1
public ×1
setter ×1