问题:我想在类中永久设置私有变量,然后使用类外部的getter函数访问它们.问题是每次我实例化一个新的类并创建一个对象时它会破坏先前设置的变量.在提供的示例中,我不想通过调用函数"getAgain"传递对象.我想简单地访问globalVars类而不破坏任何设置变量.我知道通过创建一个'新对象'本质上会破坏当前不是静态的变量.所以:
我担心我不会以正确的方式接近这一点,或者我的方法论存在缺陷.
<?php
class globalVars{
private $final = "Default Foo </br>";
public function setter($param){
$this->final = $param;
}
public function getter(){
return $this->final;
}
}
class driver{
function __construct($param){
$globalVars = new globalVars();
$globalVars->setter($param);
$val = $globalVars->getter();
echo $val;
$this->getAgain();
}
function getAgain(){
$globalVars = new globalVars();
$val = $globalVars->getter();
echo $val;
}
}
$input = "Change to Bar </br>";
$driver = new driver($input);
?>
Run Code Online (Sandbox Code Playgroud) php class global-variables objectinstantiation getter-setter
这里只是有点空闲的好奇心.
基本上,如果我有一个只有少量原始数据成员的对象,它会占用少量内存,并且根本不需要很长时间来创建.但是,如果我有很多与该对象相关的方法会发生什么?对象实例化是否必须考虑到这些?
例如,假设我有一个Class(在这里插入荒谬的大数字)我可以调用的不同方法的数量.与没有方法相比,JVM是否需要更长时间来创建该类的实例?
我有一个类,我声明一个对象,但不初始化该对象.然后我将对象传递给另一个类中的方法进行初始化.我期望发生的是调用类中的对象现在将具有对初始化对象的引用,但它是null.
这是我的意思的一个例子:
class MainClass
{
ObjectA foo;
OtherClass.InitializeObjectA(foo);
// why is foo null over here?
}
class OtherClass
{
public static void InitializeObjectA(ObjectA device)
{
device = new ObjectA();
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我在调用InitializeObjectA()它之后尝试使用foo时仍然指向null!如果我改变InitializeObjectA()到out ObjectA device它的工作原理.任何人都可以解释为什么需要它?
他实例化地图的两种方法之间有什么区别:
Map<String, String> map = new TreeMap<String, String>();
Run Code Online (Sandbox Code Playgroud)
和
Map<String, String> map = new TreeMap<>();
Run Code Online (Sandbox Code Playgroud)
哪一个更好?
我有一个程序必须连续创建数千个具有大约12-14个方法的类的对象.它们是一个复杂类的事实是否会导致创建一个更简单的对象(如列表或字典)甚至是另一个具有更少方法的对象的性能?
关于我的情况的一些细节:我有一堆"文本"对象,不断创建和刷新其内容的"打印".打印对象有许多方法,但只有少数几个属性.打印对象不能包含在文本对象中,因为文本对象需要"可重用"并且可以创建多个独立的打印副本,因此规则只是在刷新时交换打印对象的属性.
我最好过的,
我假设这取决于是否存在与生成包含其中所有方法的新对象相关的大量成本,而不是必须将所有独立函数导入到它们将被称为对象方法的任何位置.
嘿.是否有可能有一个方法允许用户传入某种类型的参数并让该方法实例化该类型的新对象?我想做这样的事情:(我不知道仿制药是否可行,但试了一下)
public void LoadData<T>(T, string id, string value) where T : new()
{
this.Item.Add(new T() { ID=id, Val = value});
}
Run Code Online (Sandbox Code Playgroud)
上述方法不起作用,但想法是用户传递他们想要实例化的对象类型,并且该方法将根据这些参数填写详细信息.我可以传递一个Enum参数并Switch根据它创建一个新对象,但是有更好的方法吗?谢谢
我正在辅导的一个学生正在参加一个Web开发课程,该课程使用了关于Java的Dietel书籍,其中包含了一些涉及泛型的奇怪代码:
class StackComposition <T>
{
private List<T> stackList;
public StackComposition()
{
stackList = new List<T>("stack") // ERROR
}
// .... more code
}
Run Code Online (Sandbox Code Playgroud)
很明显,为什么这段代码不起作用,我很困惑为什么教师建议学生使用这段代码作为起点.也许我只是不理解泛型,我的Java技能不足,但我没有看到如何用泛型类型实例化泛型集合.我看到的目的是通过使用通用List集合并在运行时确定类型来创建Stack,但我不知道如何使用上面的配置.我的第一个倾向是告诉学生使用Generic Stack<T>对象并忘记编写这个自定义Stack类,但显然这不是作业的目标.
我尝试使用java.lang.reflect包来解决这个问题,但据我所知,这只适用于非通用容器,例如Array:
public StackComposition(Class<T> type)
{
Object obj = Array.newInstance(type, 10);
}
Run Code Online (Sandbox Code Playgroud) 请原谅我,如果这有答案的话; 我真的不知道要搜索什么...此外,我的术语可能已关闭(声明,实例化等),因为我仍在学习Java和OOP.
我正在阅读教科书:数据结构和抽象,Frank Carrano的第3版(第20章:字典实现),我遇到了一个非常标准的外观类,其中包含私有内部类.但是有一些关于我不太了解的方法.
我很难理解为什么要将对象(或对象数组)声明为外部类中的字段,然后在构造函数中实例化一个临时对象并将该字段初始化为临时对象而不是仅仅实例化该属性本身在构造函数中.
编辑:我将类型参数添加回代码...在这种情况下,K&V用于键和值,因为我们正在使用字典.我不知道这个问题是否重要......
我在这里重写了有问题的代码,重命名类等等,所以它们不是那么本地化的:
public class OuterClass<K, V> implements SomeInterface<K, V>
{
private InnerClass<K, V>[] foo; // Declare array of inner class object
private final static int CAPACITY = 10; // Initial Array Capacity
// Outer Class Constructor
public OuterClass()
{
InnerClass<K, V>[] tempFoo = (InnerClass<K, V>[])new InnerClass[CAPACITY];
foo = tempFoo;
}
// ...
private class InnerClass<S, T>
{
// Inner Class Constructor
private InnerClass()
{
// ...
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我试图摆脱代码中的任何具体细节,因为我认为它们与问题无关.有没有理由不在外层类构造函数中执行此操作:
foo = …Run Code Online (Sandbox Code Playgroud) java ×4
c# ×2
generics ×2
.net ×1
class ×1
constructor ×1
dictionary ×1
methods ×1
oop ×1
performance ×1
php ×1
python ×1