Ben php dünyasındanım. Alıcıların ve ayarlayıcıların ne olduğunu açıklayabilir misiniz ve size bazı örnekler verebilir misiniz?
Ben php dünyasındanım. Alıcıların ve ayarlayıcıların ne olduğunu açıklayabilir misiniz ve size bazı örnekler verebilir misiniz?
Yanıtlar:
Bunun için öğretici gerçekten gerekli değildir. Kapsülleme hakkında bilgi edinin
private String myField; //"private" means access to this is restricted
public String getMyField()
{
//include validation, logic, logging or whatever you like here
return this.myField;
}
public void setMyField(String value)
{
//include more logic
this.myField = value;
}
someObj.getTime().setHour(5)
, someObj
iç durumunu etkilememelidir . Ayrıca ayarlayıcılar ve alıcılar (meraklılarının adıyla erişimciler ve mutatörler) çok katı bir yöntem imzasına sahiptir, yani alıcı herhangi bir parametreye sahip değildir. Genel olarak yöntemler zaten tek bir şey yapmalıdır.
this
Daha spesifik kapsamı olan bir şeyle çelişki olmadığı sürece anahtar kelime isteğe bağlıdır. Verdiğiniz örnekte, yaratılan ayarlayıcı, adı alan adıyla eşleşen tek bir parametreye sahip olacaktır, bu nedenle this.fieldName = fieldName
, fieldName = fieldname
elde edileceği gibi parametrenin kendisine atanmasından ziyade alanın atandığını ayırt etmek için kullanılır . Alıcıda böyle bir çatışma yoktur.
Java'da alıcılar ve ayarlayıcılar tamamen sıradan işlevlerdir. Onları alıcı veya ayarlayıcı yapan tek şey gelenektir. Foo için alıcıya getFoo ve ayarlayıcıya setFoo denir. Bir boole durumunda alıcıya isFoo denir. Ayrıca, 'ad' için bir alıcı ve ayarlayıcı örneğinde gösterildiği gibi belirli bir bildirime sahip olmaları gerekir:
class Dummy
{
private String name;
public Dummy() {}
public Dummy(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Üyelerinizi herkese açık hale getirmek yerine alıcılar ve ayarlayıcılar kullanmanın nedeni, arayüzü değiştirmeden uygulamayı değiştirmeyi mümkün kılmasıdır. Ayrıca, nesneleri incelemek için yansımayı kullanan birçok araç ve araç takımı, yalnızca alıcıları ve ayarlayıcıları olan nesneleri kabul eder. Örneğin JavaBeans , alıcılara ve ayarlayıcılara ve diğer bazı gereksinimlere sahip olmalıdır.
error: invalid method declaration; return type required
class Clock {
String time;
void setTime (String t) {
time = t;
}
String getTime() {
return time;
}
}
class ClockTestDrive {
public static void main (String [] args) {
Clock c = new Clock;
c.setTime("12345")
String tod = c.getTime();
System.out.println(time: " + tod);
}
}
Programı çalıştırdığınızda program ana şebekede başlar,
setTime()
c nesnesi tarafından çağrılırtime
, geçen değere ayarlanırgetTime()
c nesnesi tarafından çağrılırtod
ve tod
yazdırılacakAyrıca " Alıcı ve ayarlayıcı yöntemleri neden kötüdür " adlı makaleyi de okumak isteyebilirsiniz :
Alıcı / ayarlayıcı yöntemleri Java'da yaygın olsa da, özellikle nesne yönelimli (OO) değildirler. Aslında, kodunuzun bakımına zarar verebilirler. Dahası, çok sayıda alıcı ve ayarlayıcı yönteminin varlığı, programın OO perspektifinden mutlaka iyi tasarlanmadığı konusunda kırmızı bir bayraktır.
Bu makale alıcıları ve ayarlayıcıları neden kullanmamanız gerektiğini (ve bunları ne zaman kullanabileceğinizi) açıklar ve alıcı / ayarlayıcı zihniyetinden çıkmanıza yardımcı olacak bir tasarım metodolojisi önerir.
Mozilla'dan bir javascript örneği:
var o = { a:0 } // `o` is now a basic object
Object.defineProperty(o, "b", {
get: function () {
return this.a + 1;
}
});
console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)
Bunları çok kullandım çünkü harikalar . Kodlama + animasyonumdan hoşlanırken kullanırdım. Örneğin, Number
web sayfanızda o numarayı görüntüleyen bir ayarlayıcı yapın. Ayarlayıcı kullanıldığında, bir ara doldurucu kullanarak eski numarayı yeni numaraya hareketlendirir . İlk sayı 0 ise ve onu 10 olarak ayarlarsanız, sayıların hızlıca 0'dan 10'a, diyelim ki yarım saniye arasında değiştiğini görürsünüz. Kullanıcılar bu şeyleri sever ve yaratmak eğlencelidir.
Sof'dan örnek
<?php
class MyClass {
private $firstField;
private $secondField;
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
?>
alıntılar:
Getter ve setter'ı java'da kullanmanın en basit yolunu açıklamak için bir örnek. Bunu daha basit bir şekilde yapabilirsiniz, ancak alıcı ve ayarlayıcı, kalıtımda alt sınıfta ebeveyn sınıfının özel üyesini kullanırken olan özel bir şeye sahiptir. Alıcı ve ayarlayıcı kullanarak bunu mümkün kılabilirsiniz.
package stackoverflow;
public class StackoverFlow
{
private int x;
public int getX()
{
return x;
}
public int setX(int x)
{
return this.x = x;
}
public void showX()
{
System.out.println("value of x "+x);
}
public static void main(String[] args) {
StackoverFlow sto = new StackoverFlow();
sto.setX(10);
sto.getX();
sto.showX();
}
}