在我的另一个问题中,我已经提到了这个问题,但我认为值得将其分解为自己的问题,因为它并不真正依赖于我提到的其他场景.
无论如何 - 在Q上,不知道这是否可能.寻找解决方案/解决方法.
我有一个类库,只有POCO:
MyCompany.MyProject.Domain.POCO
Run Code Online (Sandbox Code Playgroud)
这个程序集有一个这样的POCO:
public class Post
{
public int PostId { get; set; }
public int Name { get; set; }
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我有另一个类库,它是我的DAL/Repository,并使用Entity Framework 4.0进行持久化:
MyCompany.MyProject.Repositories
Run Code Online (Sandbox Code Playgroud)
这个程序集引用了POCO项目,因为它需要在POCO上执行CRUD操作(抓取DB对象,项目进入POCO,返回,以及修改POCO).
现在,我还有一个Web应用程序,它同时引用了POCO和Repository程序集.
如果我这样做:
somePOCO.PostId = 10;
Run Code Online (Sandbox Code Playgroud)
我得到一个SQLException,因为PostId是数据库中的IDENTITY字段,因此不应该明确设置.
有没有办法可以隐藏这些特殊属性的setter,以便只有存储库可以访问setter?
我想不出用常规辅助功能修饰符来做到这一点的方法(因为它们都不适合这种情况),你们能想到一个解决方法吗?
在编写您打算开源的应用程序(在java中)时,拥有大量的getter和setter并使变量变为私有通常是一个好主意吗?更具体地说,如果那是一个Android应用程序,上述问题的答案是否仍然有效?
编辑:如果你们能给我一个具体的理由,为什么它更好,那将是非常棒的.
我有带有函数指针的pagePtr类,如下所示
int (*FunPtr)(char*sz, unsigned int max_bytes, char* arg1, char* arg2, char* arg3,
char* arg4);//Function definition
Run Code Online (Sandbox Code Playgroud)
我在这样的构造函数中初始化它
pagePtr::pagePtr() : FunPtr(Null)
{
}
Run Code Online (Sandbox Code Playgroud)
现在我写了这样的setter,如果它是正确的我不知道
void pagePtr::setFunPtr(int(*ptr2Fun)(char*sz, unsigned int max_bytes,
char* arg1, char* arg2, char* arg3, char* arg4))
{
FunPtr = ptr2Fun;
}
Run Code Online (Sandbox Code Playgroud)
我不知道怎么写一个getter(如果我做错了就设置setter).有什么建议?
经常找到这样的自定义setter sintaxis:
- (void)setParentCatalog:(Catalog *)parentCatalog {
if (_parentCatalog != parentCatalog) { //???
_parentCatalog = parentCatalog;
[self refresh];
}
}
Run Code Online (Sandbox Code Playgroud)
我为什么要检查?
if (_parentCatalog != parentCatalog)
Run Code Online (Sandbox Code Playgroud) public class Hi {
private final Map<String, String> map;
public Map<String, String> getMap() {
return map;
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个Hi类,我希望map是不可变的.我还需要一个吸气剂.目前,另一个类可以从getter修改映射.我想返回一个地图副本来解决这个问题,但Map是一个接口,所以这是否意味着我必须进行getter调用:
return new HashMap<String,String>(map);
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以做到这一点,而不强制地图是一个哈希映射?我希望它能像以前一样保持同一级别.
我的大部分应用程序状态都存储在一个大型复杂的地图中.出于这个问题的目的,我将使用一个简单的结构:
(def data
{:a 1
:b {:c {:d 3}}})
Run Code Online (Sandbox Code Playgroud)
我有大量的函数都遵循相同的模式:
(defn update-map
[my-map val]
(let [a (:a my-map)
d (-> my-map :b :c :d)]
(assoc-in
(assoc my-map :a (+ a val))
[:b :c :d] (+ d val))))
Run Code Online (Sandbox Code Playgroud)
我从地图中检索一个或多个值,执行一些计算,并使用更新的值创建新地图.这种方法存在两个问题:
我编写了一个宏来减少定义这些函数所需的样板代码.它的工作原理是查找预定义的getter和setter函数,并自动生成let块:
(def getters
{'a #(:a %)
'd #(-> % :b :c :d)})
(def setters
{'a #(assoc % :a %2)
'd #(assoc-in % [:b :c :d] %2)})
(defmacro def-map-fn
[name [& args] [& fields] & code]
(let [my-map 'my-map
lookup #(reduce …Run Code Online (Sandbox Code Playgroud) 在下面的示例中,我创建了两个texField.在写入第一个文本时,如果用户输入的空格或数字,则应在另一个textField_1上显示消息.但是一旦用户输入数字/空格,它就会给出java.lang.NullPointerException.
public class NewDemo extends JFrame {
private JPanel p1;
private JTextField textField,textField_1;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
NewDemo frame = new NewDemo();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public NewDemo() {
setTitle("New Demo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 500, 500);
p1 = new JPanel();
p1.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(p1);
p1.setLayout(null);
textField = new JTextField();
textField.setBounds(70, 71, 86, 20);
p1.add(textField);
textField.setColumns(10);
JLabel lblNewLabel = new JLabel(""); …Run Code Online (Sandbox Code Playgroud) 我认为这对我的目的来说是实用的,但也有点令人困惑,因为人们可能希望获得与输入相同的输出.
@property
def value(self):
return next(
(option.key for option in self._options
if option.id == self._value),
None)
@value.setter
def value(self, value):
idoption = None
if isinstance(value, Option):
idoption = next(
(option.id for option in self._options
if option.id == value.id), None)
elif isinstance(value, int):
idoption = next(
itertools.chain(
(option.id for option in self._options
if option.key == value),
(option.id for option in self._options
if option.id == value)
), None)
elif isinstance(value, str):
idoption = next(
(option.id for option in self._options
if option.key == …Run Code Online (Sandbox Code Playgroud) 虚拟获取器和设置器背后的想法是什么?我们为什么需要它们?
我在观看教程时正在编写以下代码:
login: async args => {
const user = await User.findOne(args.email)
if (!user) {
throw new Error("Email doesn't exist!")
}
const isEqual = await bcrypt.compare(args.password, user.password)
if (!isEqual) {
throw new Error("Wrong Password!")
}
jwt.sign({userId: user.id})
}
Run Code Online (Sandbox Code Playgroud)
我在这里使用一个虚拟的吸气剂来提取,user.id但是我真的不明白这里发生了什么。
我在用猫鼬。
getter-setter ×10
java ×4
.net ×1
android ×1
assemblies ×1
async-await ×1
c# ×1
c++ ×1
clojure ×1
getter ×1
immutability ×1
javascript ×1
macros ×1
object ×1
objective-c ×1
open-source ×1
python ×1
reference ×1
return-value ×1
setter ×1
swing ×1